Setup

back to TOC

Data preparation

220 parsing failures.
row # A tibble: 5 x 4 col     row   col           expected actual expected   <int> <int>              <chr>  <chr> actual 1   301    NA date like %m/%d/%y Jun-07 row 2   302    NA date like %m/%d/%y Jun-07 col 3   303    NA date like %m/%d/%y Jun-07 expected 4   304    NA date like %m/%d/%y Jun-07 actual 5   305    NA date like %m/%d/%y Jun-07
... ................. ... ....................................... ........ ....................................... ...... ....................................... ... ....................................... ... ....................................... ........ ....................................... ...... .......................................
See problems(...) for more details.
80 parsing failures.
row # A tibble: 5 x 4 col     row   col           expected actual expected   <int> <int>              <chr>  <chr> actual 1    21    NA date like %m/%d/%y Jun-12 row 2    22    NA date like %m/%d/%y Jun-12 col 3    23    NA date like %m/%d/%y Jun-12 expected 4    24    NA date like %m/%d/%y Jun-12 actual 5    25    NA date like %m/%d/%y Jun-12
... ................. ... ....................................... ........ ....................................... ...... ....................................... ... ....................................... ... ....................................... ........ ....................................... ...... .......................................
See problems(...) for more details.

back to TOC

Analysis plan

For all studies we conduct exploratory factor analyses using Pearson correlations to find minimum residual solutions.

For each study, we first examine maximal unrotated and rotated solutions. To determine the maximum number of factors to extract, we use the following rule of thumb: With \(p\) observations per participant, we can extract a maximum of \(k\) factors, where \((p-k)*2 > p+k\), i.e., \(k < p/3\). Thus, with 40 mental capacity items, we can extract a maximum of 13 factors.

To determine how many factors to retain, we use the following preset retention criteria, considering the unrotated maximal solution (unless otherwise noted):

We then examine and interpret varimax-rotated solutions, extracting only the number of factors that meet these criteria.

Study 1

Study information:

Demographics

Joining, by = c("character", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `character` joining factor and character vector, coercing into character vector

back to TOC

Exploratory factor analysis

Step 1: Run maximal EFA (without and with rotation)

Parallel analysis suggests that the number of factors =  4  and the number of components =  4 

Factor Analysis using method =  minres
Call: fa(r = d1_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry           0.65 -0.04 -0.11 -0.03  0.05  0.22 -0.02  0.04 -0.10  0.17  0.02 -0.20 -0.09 0.58
beliefs         0.48  0.40 -0.16 -0.14  0.04 -0.38  0.18  0.09  0.07  0.04 -0.06 -0.09 -0.04 0.64
calm            0.68 -0.17  0.01 -0.08 -0.08  0.04  0.08  0.10 -0.04  0.02 -0.01  0.05 -0.07 0.54
choices         0.37  0.34  0.36 -0.20  0.06  0.09 -0.25 -0.20  0.12 -0.05  0.17 -0.07 -0.05 0.59
communicating   0.11  0.62  0.18  0.14 -0.18  0.30  0.11  0.18  0.15 -0.05 -0.08 -0.01 -0.03 0.65
computations   -0.33  0.82 -0.07  0.14 -0.03  0.00 -0.02  0.04  0.03  0.00  0.03 -0.06 -0.03 0.81
conscious       0.44  0.10  0.44 -0.11  0.17 -0.11 -0.24  0.06  0.08 -0.19 -0.15 -0.21  0.05 0.63
depressed       0.74  0.04 -0.37  0.04 -0.14  0.04 -0.17 -0.04 -0.21 -0.05 -0.02  0.06 -0.03 0.79
depth           0.26  0.27  0.48  0.28  0.12 -0.09 -0.16 -0.09  0.04 -0.08 -0.10 -0.13 -0.02 0.53
desires         0.66 -0.17  0.10 -0.02 -0.03 -0.02  0.35 -0.48  0.13 -0.14 -0.08  0.02 -0.07 0.87
disrespected    0.63  0.06 -0.35  0.16  0.07  0.07 -0.13 -0.03 -0.07 -0.03 -0.07 -0.02  0.02 0.59
embarrassed     0.52  0.14 -0.40  0.19  0.48  0.18  0.11  0.11  0.12 -0.03  0.09  0.12  0.07 0.82
emo_recog       0.37  0.39 -0.10 -0.10  0.01 -0.27 -0.09  0.10  0.04  0.08 -0.14  0.14  0.11 0.46
fear            0.72 -0.39  0.14  0.03 -0.18  0.07  0.09  0.12 -0.03  0.13 -0.04 -0.16  0.15 0.82
free_will       0.31  0.30  0.32 -0.40  0.15  0.22 -0.07 -0.19 -0.05  0.27  0.10  0.08  0.00 0.65
goal            0.41  0.21  0.19 -0.11  0.07 -0.11  0.18 -0.08  0.02 -0.03  0.07 -0.14  0.15 0.36
guilt           0.62  0.14 -0.41  0.21  0.43  0.14  0.04  0.02  0.08  0.00 -0.03 -0.03 -0.05 0.84
happy           0.76  0.00 -0.33 -0.08 -0.22  0.08 -0.15 -0.03 -0.08 -0.04 -0.08 -0.04 -0.08 0.80
hungry          0.55 -0.71  0.22 -0.03  0.08 -0.02  0.06  0.02  0.03  0.03  0.05  0.07  0.01 0.88
intentions      0.19  0.62  0.02 -0.16  0.01  0.07  0.26  0.00 -0.20  0.00  0.09 -0.01  0.18 0.60
joy             0.76  0.01 -0.39  0.10 -0.17 -0.01 -0.08 -0.07  0.05  0.00 -0.03  0.09 -0.01 0.79
love            0.75  0.11 -0.28  0.09 -0.07 -0.09 -0.07 -0.14 -0.03 -0.08  0.00  0.08  0.07 0.71
morality        0.31  0.50 -0.13  0.02 -0.07 -0.19  0.08  0.05 -0.04  0.00  0.18 -0.10  0.10 0.46
nauseated       0.65 -0.32  0.14  0.08 -0.16  0.05  0.01 -0.06  0.14  0.03  0.03  0.04  0.05 0.61
odors           0.49 -0.35  0.37  0.05  0.15 -0.09 -0.03  0.10  0.07  0.01 -0.03  0.11  0.05 0.56
pain            0.63 -0.52  0.19 -0.01 -0.04  0.11  0.11  0.19  0.05 -0.01  0.09 -0.01 -0.14 0.80
personality     0.44  0.36 -0.19 -0.13 -0.03 -0.27  0.01  0.00  0.24  0.20 -0.06  0.09 -0.17 0.59
pleasure        0.69 -0.23 -0.07  0.15 -0.15 -0.08 -0.15  0.06  0.16 -0.06  0.21  0.09  0.18 0.72
pride           0.68  0.18 -0.42  0.08  0.04  0.04  0.01 -0.08 -0.14  0.05 -0.06 -0.16  0.01 0.74
reasoning       0.34  0.44  0.31 -0.16  0.01  0.21 -0.11  0.01  0.08  0.20 -0.21  0.09  0.12 0.60
recognizing     0.10  0.76  0.12  0.13 -0.21  0.15  0.11  0.11  0.15 -0.02  0.00 -0.02 -0.12 0.75
remembering     0.14  0.66  0.16  0.10 -0.15  0.13  0.01 -0.05  0.03 -0.15  0.04  0.09  0.10 0.58
safe            0.71 -0.29  0.21 -0.12 -0.03 -0.06  0.04  0.06 -0.03  0.09 -0.13 -0.04  0.07 0.68
seeing          0.33  0.15  0.50  0.28  0.08 -0.03 -0.07 -0.01 -0.11 -0.01  0.07  0.09 -0.08 0.50
self_aware      0.46  0.18  0.22 -0.30  0.09  0.00  0.12  0.13 -0.20 -0.28 -0.21  0.15 -0.07 0.60
self_restraint  0.43  0.35 -0.05 -0.15  0.04 -0.19 -0.08  0.07  0.00  0.02  0.17 -0.04 -0.14 0.43
sounds          0.27  0.20  0.42  0.38 -0.06 -0.02  0.06 -0.07 -0.11  0.12 -0.07  0.08  0.01 0.48
temperature     0.30  0.19  0.46  0.40  0.05 -0.22  0.04  0.00 -0.26  0.12  0.09  0.06 -0.09 0.65
thoughts        0.55  0.18  0.10 -0.37 -0.01  0.04 -0.04  0.10 -0.09 -0.15  0.19  0.09 -0.05 0.57
tired           0.69 -0.34  0.23  0.07 -0.06  0.05  0.06  0.08  0.07 -0.07  0.09 -0.11 -0.05 0.70
                 u2 com
angry          0.42 1.8
beliefs        0.36 4.0
calm           0.46 1.3
choices        0.41 6.1
communicating  0.35 2.6
computations   0.19 1.4
conscious      0.37 4.6
depressed      0.21 2.0
depth          0.47 4.1
desires        0.13 2.9
disrespected   0.41 2.0
embarrassed    0.18 4.3
emo_recog      0.54 4.3
fear           0.18 2.3
free_will      0.35 6.8
goal           0.64 4.0
guilt          0.16 3.3
happy          0.20 1.8
hungry         0.12 2.2
intentions     0.40 2.3
joy            0.21 1.8
love           0.29 1.6
morality       0.54 2.9
nauseated      0.39 2.0
odors          0.44 3.4
pain           0.20 2.7
personality    0.41 5.2
pleasure       0.28 2.3
pride          0.26 2.2
reasoning      0.40 5.4
recognizing    0.25 1.7
remembering    0.42 1.7
safe           0.32 1.8
seeing         0.50 3.1
self_aware     0.40 5.6
self_restraint 0.57 3.5
sounds         0.52 4.0
temperature    0.35 4.8
thoughts       0.43 2.9
tired          0.30 2.0

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           11.03 5.51 3.15 1.29 0.87 0.84 0.64 0.56 0.51 0.46 0.43 0.38 0.32
Proportion Var         0.28 0.14 0.08 0.03 0.02 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.28 0.41 0.49 0.52 0.55 0.57 0.58 0.60 0.61 0.62 0.63 0.64 0.65
Proportion Explained   0.42 0.21 0.12 0.05 0.03 0.03 0.02 0.02 0.02 0.02 0.02 0.01 0.01
Cumulative Proportion  0.42 0.64 0.76 0.81 0.84 0.87 0.90 0.92 0.94 0.96 0.97 0.99 1.00

Mean item complexity =  3.1
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 338  and the objective function was  2.41 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  196 with the empirical chi square  93.35  with prob <  1 
The total number of observations was  200  with Likelihood Chi Square =  424.01  with prob <  0.001 

Tucker Lewis Index of factoring reliability =  0.951
RMSEA index =  0.046  and the 90 % confidence intervals are  0.024 0.046
BIC =  -1366.82
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10
Correlation of scores with factors             0.99 0.98 0.95 0.88 0.89 0.84 0.83 0.85 0.78 0.75
Multiple R square of scores with factors       0.98 0.95 0.91 0.77 0.79 0.70 0.70 0.73 0.61 0.57
Minimum correlation of possible factor scores  0.95 0.90 0.82 0.55 0.59 0.40 0.39 0.45 0.23 0.14
                                               MR11 MR12 MR13
Correlation of scores with factors             0.73 0.74 0.71
Multiple R square of scores with factors       0.54 0.54 0.50
Minimum correlation of possible factor scores  0.08 0.08 0.00
Factor Analysis using method =  minres
Call: fa(r = d1_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry           0.65 -0.04 -0.11 -0.03  0.05  0.22 -0.02  0.04 -0.10  0.17  0.02 -0.20 -0.09 0.58
beliefs         0.48  0.40 -0.16 -0.14  0.04 -0.38  0.18  0.09  0.07  0.04 -0.06 -0.09 -0.04 0.64
calm            0.68 -0.17  0.01 -0.08 -0.08  0.04  0.08  0.10 -0.04  0.02 -0.01  0.05 -0.07 0.54
choices         0.37  0.34  0.36 -0.20  0.06  0.09 -0.25 -0.20  0.12 -0.05  0.17 -0.07 -0.05 0.59
communicating   0.11  0.62  0.18  0.14 -0.18  0.30  0.11  0.18  0.15 -0.05 -0.08 -0.01 -0.03 0.65
computations   -0.33  0.82 -0.07  0.14 -0.03  0.00 -0.02  0.04  0.03  0.00  0.03 -0.06 -0.03 0.81
conscious       0.44  0.10  0.44 -0.11  0.17 -0.11 -0.24  0.06  0.08 -0.19 -0.15 -0.21  0.05 0.63
depressed       0.74  0.04 -0.37  0.04 -0.14  0.04 -0.17 -0.04 -0.21 -0.05 -0.02  0.06 -0.03 0.79
depth           0.26  0.27  0.48  0.28  0.12 -0.09 -0.16 -0.09  0.04 -0.08 -0.10 -0.13 -0.02 0.53
desires         0.66 -0.17  0.10 -0.02 -0.03 -0.02  0.35 -0.48  0.13 -0.14 -0.08  0.02 -0.07 0.87
disrespected    0.63  0.06 -0.35  0.16  0.07  0.07 -0.13 -0.03 -0.07 -0.03 -0.07 -0.02  0.02 0.59
embarrassed     0.52  0.14 -0.40  0.19  0.48  0.18  0.11  0.11  0.12 -0.03  0.09  0.12  0.07 0.82
emo_recog       0.37  0.39 -0.10 -0.10  0.01 -0.27 -0.09  0.10  0.04  0.08 -0.14  0.14  0.11 0.46
fear            0.72 -0.39  0.14  0.03 -0.18  0.07  0.09  0.12 -0.03  0.13 -0.04 -0.16  0.15 0.82
free_will       0.31  0.30  0.32 -0.40  0.15  0.22 -0.07 -0.19 -0.05  0.27  0.10  0.08  0.00 0.65
goal            0.41  0.21  0.19 -0.11  0.07 -0.11  0.18 -0.08  0.02 -0.03  0.07 -0.14  0.15 0.36
guilt           0.62  0.14 -0.41  0.21  0.43  0.14  0.04  0.02  0.08  0.00 -0.03 -0.03 -0.05 0.84
happy           0.76  0.00 -0.33 -0.08 -0.22  0.08 -0.15 -0.03 -0.08 -0.04 -0.08 -0.04 -0.08 0.80
hungry          0.55 -0.71  0.22 -0.03  0.08 -0.02  0.06  0.02  0.03  0.03  0.05  0.07  0.01 0.88
intentions      0.19  0.62  0.02 -0.16  0.01  0.07  0.26  0.00 -0.20  0.00  0.09 -0.01  0.18 0.60
joy             0.76  0.01 -0.39  0.10 -0.17 -0.01 -0.08 -0.07  0.05  0.00 -0.03  0.09 -0.01 0.79
love            0.75  0.11 -0.28  0.09 -0.07 -0.09 -0.07 -0.14 -0.03 -0.08  0.00  0.08  0.07 0.71
morality        0.31  0.50 -0.13  0.02 -0.07 -0.19  0.08  0.05 -0.04  0.00  0.18 -0.10  0.10 0.46
nauseated       0.65 -0.32  0.14  0.08 -0.16  0.05  0.01 -0.06  0.14  0.03  0.03  0.04  0.05 0.61
odors           0.49 -0.35  0.37  0.05  0.15 -0.09 -0.03  0.10  0.07  0.01 -0.03  0.11  0.05 0.56
pain            0.63 -0.52  0.19 -0.01 -0.04  0.11  0.11  0.19  0.05 -0.01  0.09 -0.01 -0.14 0.80
personality     0.44  0.36 -0.19 -0.13 -0.03 -0.27  0.01  0.00  0.24  0.20 -0.06  0.09 -0.17 0.59
pleasure        0.69 -0.23 -0.07  0.15 -0.15 -0.08 -0.15  0.06  0.16 -0.06  0.21  0.09  0.18 0.72
pride           0.68  0.18 -0.42  0.08  0.04  0.04  0.01 -0.08 -0.14  0.05 -0.06 -0.16  0.01 0.74
reasoning       0.34  0.44  0.31 -0.16  0.01  0.21 -0.11  0.01  0.08  0.20 -0.21  0.09  0.12 0.60
recognizing     0.10  0.76  0.12  0.13 -0.21  0.15  0.11  0.11  0.15 -0.02  0.00 -0.02 -0.12 0.75
remembering     0.14  0.66  0.16  0.10 -0.15  0.13  0.01 -0.05  0.03 -0.15  0.04  0.09  0.10 0.58
safe            0.71 -0.29  0.21 -0.12 -0.03 -0.06  0.04  0.06 -0.03  0.09 -0.13 -0.04  0.07 0.68
seeing          0.33  0.15  0.50  0.28  0.08 -0.03 -0.07 -0.01 -0.11 -0.01  0.07  0.09 -0.08 0.50
self_aware      0.46  0.18  0.22 -0.30  0.09  0.00  0.12  0.13 -0.20 -0.28 -0.21  0.15 -0.07 0.60
self_restraint  0.43  0.35 -0.05 -0.15  0.04 -0.19 -0.08  0.07  0.00  0.02  0.17 -0.04 -0.14 0.43
sounds          0.27  0.20  0.42  0.38 -0.06 -0.02  0.06 -0.07 -0.11  0.12 -0.07  0.08  0.01 0.48
temperature     0.30  0.19  0.46  0.40  0.05 -0.22  0.04  0.00 -0.26  0.12  0.09  0.06 -0.09 0.65
thoughts        0.55  0.18  0.10 -0.37 -0.01  0.04 -0.04  0.10 -0.09 -0.15  0.19  0.09 -0.05 0.57
tired           0.69 -0.34  0.23  0.07 -0.06  0.05  0.06  0.08  0.07 -0.07  0.09 -0.11 -0.05 0.70
                 u2 com
angry          0.42 1.8
beliefs        0.36 4.0
calm           0.46 1.3
choices        0.41 6.1
communicating  0.35 2.6
computations   0.19 1.4
conscious      0.37 4.6
depressed      0.21 2.0
depth          0.47 4.1
desires        0.13 2.9
disrespected   0.41 2.0
embarrassed    0.18 4.3
emo_recog      0.54 4.3
fear           0.18 2.3
free_will      0.35 6.8
goal           0.64 4.0
guilt          0.16 3.3
happy          0.20 1.8
hungry         0.12 2.2
intentions     0.40 2.3
joy            0.21 1.8
love           0.29 1.6
morality       0.54 2.9
nauseated      0.39 2.0
odors          0.44 3.4
pain           0.20 2.7
personality    0.41 5.2
pleasure       0.28 2.3
pride          0.26 2.2
reasoning      0.40 5.4
recognizing    0.25 1.7
remembering    0.42 1.7
safe           0.32 1.8
seeing         0.50 3.1
self_aware     0.40 5.6
self_restraint 0.57 3.5
sounds         0.52 4.0
temperature    0.35 4.8
thoughts       0.43 2.9
tired          0.30 2.0

                        MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           11.03 5.51 3.15 1.29 0.87 0.84 0.64 0.56 0.51 0.46 0.43 0.38 0.32
Proportion Var         0.28 0.14 0.08 0.03 0.02 0.02 0.02 0.01 0.01 0.01 0.01 0.01 0.01
Cumulative Var         0.28 0.41 0.49 0.52 0.55 0.57 0.58 0.60 0.61 0.62 0.63 0.64 0.65
Proportion Explained   0.42 0.21 0.12 0.05 0.03 0.03 0.02 0.02 0.02 0.02 0.02 0.01 0.01
Cumulative Proportion  0.42 0.64 0.76 0.81 0.84 0.87 0.90 0.92 0.94 0.96 0.97 0.99 1.00

Mean item complexity =  3.1
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 338  and the objective function was  2.41 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  196 with the empirical chi square  93.35  with prob <  1 
The total number of observations was  200  with Likelihood Chi Square =  424.01  with prob <  0.001 

Tucker Lewis Index of factoring reliability =  0.951
RMSEA index =  0.046  and the 90 % confidence intervals are  0.024 0.046
BIC =  -1366.82
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10
Correlation of scores with factors             0.99 0.98 0.95 0.88 0.89 0.84 0.83 0.85 0.78 0.75
Multiple R square of scores with factors       0.98 0.95 0.91 0.77 0.79 0.70 0.70 0.73 0.61 0.57
Minimum correlation of possible factor scores  0.95 0.90 0.82 0.55 0.59 0.40 0.39 0.45 0.23 0.14
                                               MR11 MR12 MR13
Correlation of scores with factors             0.73 0.74 0.71
Multiple R square of scores with factors       0.54 0.54 0.50
Minimum correlation of possible factor scores  0.08 0.08 0.00
[1] 3
[1] 3

Step 2: Run EFA with varimax rotation

Factor Analysis using method =  minres
Call: fa(r = d1_all, nfactors = nfactors_d1_all, rotate = chosenRotType, 
    fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   h2   u2 com
angry           0.51  0.38  0.14 0.43 0.57 2.0
beliefs         0.55 -0.05  0.30 0.40 0.60 1.6
calm            0.43  0.54  0.16 0.50 0.50 2.1
choices         0.14  0.08  0.58 0.36 0.64 1.2
communicating   0.15 -0.32  0.53 0.41 0.59 1.8
computations    0.06 -0.83  0.33 0.80 0.20 1.3
conscious       0.07  0.32  0.52 0.37 0.63 1.7
depressed       0.77  0.29  0.04 0.68 0.32 1.3
depth          -0.04  0.10  0.58 0.35 0.65 1.1
desires         0.35  0.52  0.21 0.44 0.56 2.1
disrespected    0.69  0.22  0.03 0.53 0.47 1.2
embarrassed     0.62  0.09  0.01 0.39 0.61 1.0
emo_recog       0.44 -0.09  0.30 0.29 0.71 1.9
fear            0.31  0.75  0.13 0.68 0.32 1.4
free_will       0.12  0.06  0.49 0.25 0.75 1.1
goal            0.23  0.14  0.42 0.25 0.75 1.8
guilt           0.71  0.14  0.04 0.53 0.47 1.1
happy           0.75  0.35  0.05 0.68 0.32 1.4
hungry          0.03  0.93 -0.06 0.87 0.13 1.0
intentions      0.31 -0.33  0.45 0.41 0.59 2.6
joy             0.79  0.31  0.01 0.73 0.27 1.3
love            0.75  0.28  0.15 0.66 0.34 1.4
morality        0.45 -0.22  0.32 0.36 0.64 2.3
nauseated       0.27  0.67  0.15 0.54 0.46 1.4
odors           0.01  0.66  0.24 0.50 0.50 1.2
pain            0.17  0.81  0.06 0.70 0.30 1.1
personality     0.53 -0.06  0.25 0.34 0.66 1.4
pleasure        0.46  0.55  0.07 0.51 0.49 2.0
pride           0.81  0.14  0.07 0.68 0.32 1.1
reasoning       0.18 -0.02  0.60 0.39 0.61 1.2
recognizing     0.22 -0.45  0.58 0.59 0.41 2.2
remembering     0.19 -0.35  0.57 0.48 0.52 1.9
safe            0.29  0.70  0.24 0.63 0.37 1.6
seeing         -0.04  0.24  0.56 0.37 0.63 1.4
self_aware      0.23  0.21  0.41 0.27 0.73 2.1
self_restraint  0.44 -0.01  0.34 0.30 0.70 1.9
sounds         -0.01  0.14  0.50 0.27 0.73 1.2
temperature    -0.01  0.18  0.52 0.30 0.70 1.2
thoughts        0.38  0.22  0.37 0.33 0.67 2.6
tired           0.24  0.74  0.22 0.64 0.36 1.4

                       MR1  MR2  MR3
SS loadings           7.18 7.13 4.91
Proportion Var        0.18 0.18 0.12
Cumulative Var        0.18 0.36 0.48
Proportion Explained  0.37 0.37 0.26
Cumulative Proportion 0.37 0.74 1.00

Mean item complexity =  1.6
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  27.45 with Chi Square of  5073.12
The degrees of freedom for the model are 663  and the objective function was  6.67 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.05 

The harmonic number of observations is  196 with the empirical chi square  729.79  with prob <  0.036 
The total number of observations was  200  with Likelihood Chi Square =  1219.34  with prob <  2.1e-35 

Tucker Lewis Index of factoring reliability =  0.846
RMSEA index =  0.071  and the 90 % confidence intervals are  0.059 NA
BIC =  -2293.44
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.96 0.98 0.94
Multiple R square of scores with factors       0.93 0.96 0.88
Minimum correlation of possible factor scores  0.85 0.91 0.76

back to TOC

Factor loadings table

Study 2

Study information:

Demographics

Joining, by = c("character", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `character` joining factor and character vector, coercing into character vector

back to TOC

Exploratory factor analysis

Step 1: Run maximal EFA (without and with rotation)

Parallel analysis suggests that the number of factors =  3  and the number of components =  3 

Factor Analysis using method =  minres
Call: fa(r = d2_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry           0.57 -0.17 -0.04 -0.07  0.05  0.16  0.11  0.06 -0.04  0.01 -0.04  0.02 -0.16 0.44
beliefs         0.54  0.23 -0.07 -0.09  0.05  0.24 -0.12 -0.05 -0.01  0.13  0.06  0.08  0.21 0.50
calm            0.55 -0.07  0.01  0.02 -0.10 -0.09 -0.14  0.05 -0.01 -0.18  0.10 -0.02  0.10 0.40
choices         0.43  0.05  0.26 -0.38 -0.07  0.20 -0.05 -0.13  0.11  0.05 -0.15  0.16 -0.09 0.54
communicating   0.09  0.30  0.16  0.30 -0.17  0.03  0.19  0.11  0.29  0.04  0.04 -0.02 -0.12 0.40
computations   -0.01  0.80 -0.04  0.02  0.08  0.10 -0.09  0.03  0.10 -0.11  0.08  0.10  0.00 0.71
conscious       0.36  0.08  0.48  0.21 -0.14  0.01  0.16 -0.12 -0.27 -0.14 -0.04 -0.12  0.01 0.58
depressed       0.69 -0.11 -0.13  0.05 -0.06 -0.13  0.12  0.06  0.21 -0.09 -0.15 -0.01  0.00 0.63
depth           0.14  0.22  0.36  0.12  0.34  0.02 -0.14 -0.07 -0.02  0.02  0.17 -0.15 -0.07 0.41
desires         0.52 -0.19 -0.03 -0.01 -0.08  0.21 -0.07 -0.04  0.02  0.10  0.03 -0.17  0.15 0.42
disrespected    0.69  0.00 -0.11 -0.07 -0.03 -0.02  0.16 -0.16 -0.09  0.03  0.10  0.09  0.08 0.58
embarrassed     0.53  0.03 -0.30  0.10  0.22  0.34  0.23 -0.06 -0.01 -0.03  0.02 -0.13 -0.05 0.63
emo_recog       0.34  0.50 -0.05  0.09  0.11 -0.07  0.22  0.14 -0.09  0.07 -0.02  0.13  0.05 0.49
fear            0.55 -0.37  0.11  0.11 -0.08  0.03  0.01  0.17  0.09  0.03 -0.06 -0.25 -0.09 0.58
free_will       0.49  0.00  0.32 -0.22 -0.09  0.11 -0.21 -0.18  0.08  0.03 -0.02 -0.03 -0.10 0.51
goal            0.35  0.31 -0.03 -0.09 -0.06  0.10 -0.11  0.22  0.02 -0.18 -0.25 -0.04  0.14 0.42
guilt           0.58  0.07 -0.18  0.13  0.25  0.19 -0.07 -0.10 -0.07 -0.08  0.14 -0.05 -0.03 0.53
happy           0.72  0.09 -0.20  0.18 -0.20 -0.06 -0.01 -0.13  0.09 -0.03  0.12  0.05 -0.09 0.69
hungry          0.38 -0.77  0.22  0.02  0.14 -0.04  0.01 -0.08  0.06  0.05  0.00  0.03  0.01 0.81
intentions      0.35  0.40  0.15 -0.24  0.11  0.03  0.02 -0.12  0.09 -0.14  0.08  0.05 -0.12 0.43
joy             0.70  0.00 -0.26  0.10 -0.18 -0.10 -0.03 -0.05  0.06 -0.01  0.05  0.11  0.02 0.62
love            0.60  0.03 -0.20  0.11  0.03 -0.11  0.09 -0.19 -0.05  0.05  0.07  0.03  0.14 0.50
morality        0.44  0.37 -0.13 -0.08  0.21 -0.26 -0.05  0.26 -0.18  0.33  0.07  0.03 -0.09 0.69
nauseated       0.30 -0.43  0.06  0.11  0.27  0.05  0.00  0.07  0.16  0.06 -0.10  0.02  0.08 0.42
odors           0.15 -0.53  0.38  0.06  0.09  0.12 -0.06  0.16  0.06  0.03  0.19  0.09 -0.06 0.55
pain            0.45 -0.64  0.21 -0.06  0.07 -0.09 -0.05 -0.04 -0.01  0.10 -0.01  0.06  0.08 0.70
personality     0.54  0.29 -0.01 -0.12  0.20  0.12  0.01  0.18 -0.01  0.06 -0.09  0.00  0.09 0.50
pleasure        0.60  0.04 -0.18  0.10 -0.23 -0.17 -0.31  0.04  0.01 -0.04  0.08 -0.09 -0.02 0.60
pride           0.68  0.14 -0.31  0.06 -0.05 -0.02  0.01 -0.04 -0.01 -0.04 -0.03  0.01 -0.15 0.61
reasoning       0.23  0.28  0.36  0.05 -0.16 -0.01 -0.05  0.01  0.05  0.12 -0.06 -0.11  0.22 0.37
recognizing     0.20  0.32  0.13  0.10  0.11  0.00 -0.11  0.21  0.06  0.00  0.04 -0.14  0.05 0.26
remembering     0.06  0.58  0.17  0.13 -0.05  0.00  0.01 -0.17  0.19  0.28 -0.24 -0.03 -0.08 0.59
safe            0.58 -0.08  0.23  0.06 -0.06 -0.06 -0.19  0.16 -0.24  0.00 -0.10  0.09 -0.22 0.59
seeing         -0.07  0.13  0.26 -0.03 -0.19 -0.08  0.19 -0.08  0.02  0.27  0.20 -0.08  0.02 0.30
self_aware      0.27  0.21  0.46 -0.03 -0.10  0.09  0.23  0.00 -0.31 -0.10 -0.09 -0.03  0.01 0.52
self_restraint  0.34  0.19  0.15 -0.56  0.11 -0.33  0.20  0.05  0.17 -0.16  0.15 -0.19  0.01 0.76
sounds         -0.07  0.10  0.40  0.10 -0.18  0.23  0.08  0.23  0.14 -0.08  0.25  0.23  0.06 0.47
temperature    -0.05  0.34  0.41  0.31  0.34 -0.26 -0.15 -0.23  0.08 -0.15 -0.09  0.08  0.04 0.68
thoughts        0.57  0.01  0.18 -0.05 -0.11 -0.16 -0.03  0.03 -0.09  0.03 -0.03  0.15  0.08 0.44
tired           0.39 -0.35  0.07  0.11  0.16 -0.16  0.24  0.06  0.12 -0.07 -0.11  0.12  0.05 0.45
                 u2 com
angry          0.56 1.7
beliefs        0.50 2.8
calm           0.60 1.8
choices        0.46 4.6
communicating  0.60 5.9
computations   0.29 1.2
conscious      0.42 4.2
depressed      0.37 1.7
depth          0.59 4.8
desires        0.58 2.3
disrespected   0.42 1.4
embarrassed    0.37 3.7
emo_recog      0.51 3.1
fear           0.42 2.9
free_will      0.49 3.5
goal           0.58 5.4
guilt          0.47 2.4
happy          0.31 1.8
hungry         0.19 1.8
intentions     0.57 4.2
joy            0.38 1.6
love           0.50 1.9
morality       0.31 5.9
nauseated      0.58 3.6
odors          0.45 3.0
pain           0.30 2.3
personality    0.50 2.6
pleasure       0.40 2.5
pride          0.39 1.7
reasoning      0.63 4.8
recognizing    0.74 4.7
remembering    0.41 2.8
safe           0.41 2.8
seeing         0.70 6.0
self_aware     0.48 4.2
self_restraint 0.24 4.5
sounds         0.53 5.6
temperature    0.32 6.4
thoughts       0.56 1.8
tired          0.55 4.7

                       MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           8.25 4.13 2.18 1.05 0.96 0.84 0.73 0.66 0.62 0.54 0.52 0.44 0.40
Proportion Var        0.21 0.10 0.05 0.03 0.02 0.02 0.02 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Var        0.21 0.31 0.36 0.39 0.41 0.44 0.45 0.47 0.49 0.50 0.51 0.52 0.53
Proportion Explained  0.39 0.19 0.10 0.05 0.05 0.04 0.03 0.03 0.03 0.03 0.02 0.02 0.02
Cumulative Proportion 0.39 0.58 0.68 0.73 0.78 0.82 0.85 0.88 0.91 0.94 0.96 0.98 1.00

Mean item complexity =  3.4
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.08 with Chi Square of  3157.08
The degrees of freedom for the model are 338  and the objective function was  1.79 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  198 with the empirical chi square  142.71  with prob <  1 
The total number of observations was  200  with Likelihood Chi Square =  314.7  with prob <  0.81 

Tucker Lewis Index of factoring reliability =  1.024
RMSEA index =  0.016  and the 90 % confidence intervals are  0 0.018
BIC =  -1476.13
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10
Correlation of scores with factors             0.98 0.96 0.91 0.86 0.83 0.83 0.79 0.77 0.77 0.75
Multiple R square of scores with factors       0.95 0.93 0.83 0.74 0.69 0.68 0.62 0.60 0.59 0.56
Minimum correlation of possible factor scores  0.90 0.86 0.67 0.48 0.38 0.36 0.23 0.19 0.18 0.12
                                               MR11 MR12  MR13
Correlation of scores with factors             0.73 0.71  0.67
Multiple R square of scores with factors       0.53 0.50  0.45
Minimum correlation of possible factor scores  0.06 0.00 -0.10
Factor Analysis using method =  minres
Call: fa(r = d2_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry           0.57 -0.17 -0.04 -0.07  0.05  0.16  0.11  0.06 -0.04  0.01 -0.04  0.02 -0.16 0.44
beliefs         0.54  0.23 -0.07 -0.09  0.05  0.24 -0.12 -0.05 -0.01  0.13  0.06  0.08  0.21 0.50
calm            0.55 -0.07  0.01  0.02 -0.10 -0.09 -0.14  0.05 -0.01 -0.18  0.10 -0.02  0.10 0.40
choices         0.43  0.05  0.26 -0.38 -0.07  0.20 -0.05 -0.13  0.11  0.05 -0.15  0.16 -0.09 0.54
communicating   0.09  0.30  0.16  0.30 -0.17  0.03  0.19  0.11  0.29  0.04  0.04 -0.02 -0.12 0.40
computations   -0.01  0.80 -0.04  0.02  0.08  0.10 -0.09  0.03  0.10 -0.11  0.08  0.10  0.00 0.71
conscious       0.36  0.08  0.48  0.21 -0.14  0.01  0.16 -0.12 -0.27 -0.14 -0.04 -0.12  0.01 0.58
depressed       0.69 -0.11 -0.13  0.05 -0.06 -0.13  0.12  0.06  0.21 -0.09 -0.15 -0.01  0.00 0.63
depth           0.14  0.22  0.36  0.12  0.34  0.02 -0.14 -0.07 -0.02  0.02  0.17 -0.15 -0.07 0.41
desires         0.52 -0.19 -0.03 -0.01 -0.08  0.21 -0.07 -0.04  0.02  0.10  0.03 -0.17  0.15 0.42
disrespected    0.69  0.00 -0.11 -0.07 -0.03 -0.02  0.16 -0.16 -0.09  0.03  0.10  0.09  0.08 0.58
embarrassed     0.53  0.03 -0.30  0.10  0.22  0.34  0.23 -0.06 -0.01 -0.03  0.02 -0.13 -0.05 0.63
emo_recog       0.34  0.50 -0.05  0.09  0.11 -0.07  0.22  0.14 -0.09  0.07 -0.02  0.13  0.05 0.49
fear            0.55 -0.37  0.11  0.11 -0.08  0.03  0.01  0.17  0.09  0.03 -0.06 -0.25 -0.09 0.58
free_will       0.49  0.00  0.32 -0.22 -0.09  0.11 -0.21 -0.18  0.08  0.03 -0.02 -0.03 -0.10 0.51
goal            0.35  0.31 -0.03 -0.09 -0.06  0.10 -0.11  0.22  0.02 -0.18 -0.25 -0.04  0.14 0.42
guilt           0.58  0.07 -0.18  0.13  0.25  0.19 -0.07 -0.10 -0.07 -0.08  0.14 -0.05 -0.03 0.53
happy           0.72  0.09 -0.20  0.18 -0.20 -0.06 -0.01 -0.13  0.09 -0.03  0.12  0.05 -0.09 0.69
hungry          0.38 -0.77  0.22  0.02  0.14 -0.04  0.01 -0.08  0.06  0.05  0.00  0.03  0.01 0.81
intentions      0.35  0.40  0.15 -0.24  0.11  0.03  0.02 -0.12  0.09 -0.14  0.08  0.05 -0.12 0.43
joy             0.70  0.00 -0.26  0.10 -0.18 -0.10 -0.03 -0.05  0.06 -0.01  0.05  0.11  0.02 0.62
love            0.60  0.03 -0.20  0.11  0.03 -0.11  0.09 -0.19 -0.05  0.05  0.07  0.03  0.14 0.50
morality        0.44  0.37 -0.13 -0.08  0.21 -0.26 -0.05  0.26 -0.18  0.33  0.07  0.03 -0.09 0.69
nauseated       0.30 -0.43  0.06  0.11  0.27  0.05  0.00  0.07  0.16  0.06 -0.10  0.02  0.08 0.42
odors           0.15 -0.53  0.38  0.06  0.09  0.12 -0.06  0.16  0.06  0.03  0.19  0.09 -0.06 0.55
pain            0.45 -0.64  0.21 -0.06  0.07 -0.09 -0.05 -0.04 -0.01  0.10 -0.01  0.06  0.08 0.70
personality     0.54  0.29 -0.01 -0.12  0.20  0.12  0.01  0.18 -0.01  0.06 -0.09  0.00  0.09 0.50
pleasure        0.60  0.04 -0.18  0.10 -0.23 -0.17 -0.31  0.04  0.01 -0.04  0.08 -0.09 -0.02 0.60
pride           0.68  0.14 -0.31  0.06 -0.05 -0.02  0.01 -0.04 -0.01 -0.04 -0.03  0.01 -0.15 0.61
reasoning       0.23  0.28  0.36  0.05 -0.16 -0.01 -0.05  0.01  0.05  0.12 -0.06 -0.11  0.22 0.37
recognizing     0.20  0.32  0.13  0.10  0.11  0.00 -0.11  0.21  0.06  0.00  0.04 -0.14  0.05 0.26
remembering     0.06  0.58  0.17  0.13 -0.05  0.00  0.01 -0.17  0.19  0.28 -0.24 -0.03 -0.08 0.59
safe            0.58 -0.08  0.23  0.06 -0.06 -0.06 -0.19  0.16 -0.24  0.00 -0.10  0.09 -0.22 0.59
seeing         -0.07  0.13  0.26 -0.03 -0.19 -0.08  0.19 -0.08  0.02  0.27  0.20 -0.08  0.02 0.30
self_aware      0.27  0.21  0.46 -0.03 -0.10  0.09  0.23  0.00 -0.31 -0.10 -0.09 -0.03  0.01 0.52
self_restraint  0.34  0.19  0.15 -0.56  0.11 -0.33  0.20  0.05  0.17 -0.16  0.15 -0.19  0.01 0.76
sounds         -0.07  0.10  0.40  0.10 -0.18  0.23  0.08  0.23  0.14 -0.08  0.25  0.23  0.06 0.47
temperature    -0.05  0.34  0.41  0.31  0.34 -0.26 -0.15 -0.23  0.08 -0.15 -0.09  0.08  0.04 0.68
thoughts        0.57  0.01  0.18 -0.05 -0.11 -0.16 -0.03  0.03 -0.09  0.03 -0.03  0.15  0.08 0.44
tired           0.39 -0.35  0.07  0.11  0.16 -0.16  0.24  0.06  0.12 -0.07 -0.11  0.12  0.05 0.45
                 u2 com
angry          0.56 1.7
beliefs        0.50 2.8
calm           0.60 1.8
choices        0.46 4.6
communicating  0.60 5.9
computations   0.29 1.2
conscious      0.42 4.2
depressed      0.37 1.7
depth          0.59 4.8
desires        0.58 2.3
disrespected   0.42 1.4
embarrassed    0.37 3.7
emo_recog      0.51 3.1
fear           0.42 2.9
free_will      0.49 3.5
goal           0.58 5.4
guilt          0.47 2.4
happy          0.31 1.8
hungry         0.19 1.8
intentions     0.57 4.2
joy            0.38 1.6
love           0.50 1.9
morality       0.31 5.9
nauseated      0.58 3.6
odors          0.45 3.0
pain           0.30 2.3
personality    0.50 2.6
pleasure       0.40 2.5
pride          0.39 1.7
reasoning      0.63 4.8
recognizing    0.74 4.7
remembering    0.41 2.8
safe           0.41 2.8
seeing         0.70 6.0
self_aware     0.48 4.2
self_restraint 0.24 4.5
sounds         0.53 5.6
temperature    0.32 6.4
thoughts       0.56 1.8
tired          0.55 4.7

                       MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           8.25 4.13 2.18 1.05 0.96 0.84 0.73 0.66 0.62 0.54 0.52 0.44 0.40
Proportion Var        0.21 0.10 0.05 0.03 0.02 0.02 0.02 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Var        0.21 0.31 0.36 0.39 0.41 0.44 0.45 0.47 0.49 0.50 0.51 0.52 0.53
Proportion Explained  0.39 0.19 0.10 0.05 0.05 0.04 0.03 0.03 0.03 0.03 0.02 0.02 0.02
Cumulative Proportion 0.39 0.58 0.68 0.73 0.78 0.82 0.85 0.88 0.91 0.94 0.96 0.98 1.00

Mean item complexity =  3.4
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.08 with Chi Square of  3157.08
The degrees of freedom for the model are 338  and the objective function was  1.79 

The root mean square of the residuals (RMSR) is  0.02 
The df corrected root mean square of the residuals is  0.03 

The harmonic number of observations is  198 with the empirical chi square  142.71  with prob <  1 
The total number of observations was  200  with Likelihood Chi Square =  314.7  with prob <  0.81 

Tucker Lewis Index of factoring reliability =  1.024
RMSEA index =  0.016  and the 90 % confidence intervals are  0 0.018
BIC =  -1476.13
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10
Correlation of scores with factors             0.98 0.96 0.91 0.86 0.83 0.83 0.79 0.77 0.77 0.75
Multiple R square of scores with factors       0.95 0.93 0.83 0.74 0.69 0.68 0.62 0.60 0.59 0.56
Minimum correlation of possible factor scores  0.90 0.86 0.67 0.48 0.38 0.36 0.23 0.19 0.18 0.12
                                               MR11 MR12  MR13
Correlation of scores with factors             0.73 0.71  0.67
Multiple R square of scores with factors       0.53 0.50  0.45
Minimum correlation of possible factor scores  0.06 0.00 -0.10
[1] 3
[1] 3

Step 2: Run EFA with varimax rotation

Factor Analysis using method =  minres
Call: fa(r = d2_all, nfactors = nfactors_d2_all, rotate = chosenRotType, 
    fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
                 MR1   MR2   MR3    h2   u2 com
angry           0.50  0.32  0.03 0.356 0.64 1.7
beliefs         0.55 -0.04  0.19 0.336 0.66 1.3
calm            0.48  0.24  0.12 0.299 0.70 1.6
choices         0.29  0.19  0.33 0.231 0.77 2.6
communicating   0.08 -0.17  0.28 0.111 0.89 1.8
computations    0.16 -0.71  0.35 0.650 0.35 1.6
conscious       0.16  0.22  0.51 0.331 0.67 1.6
depressed       0.65  0.28  0.02 0.504 0.50 1.4
depth           0.04  0.00  0.43 0.182 0.82 1.0
desires         0.44  0.33  0.02 0.301 0.70 1.8
disrespected    0.67  0.20  0.09 0.488 0.51 1.2
embarrassed     0.58  0.05 -0.09 0.346 0.65 1.1
emo_recog       0.42 -0.32  0.28 0.360 0.64 2.7
fear            0.38  0.54  0.07 0.441 0.56 1.8
free_will       0.32  0.28  0.39 0.331 0.67 2.8
goal            0.38 -0.15  0.21 0.212 0.79 1.9
guilt           0.59  0.07  0.04 0.358 0.64 1.0
happy           0.74  0.09  0.05 0.555 0.44 1.0
hungry          0.11  0.88 -0.08 0.786 0.21 1.0
intentions      0.33 -0.16  0.39 0.293 0.71 2.3
joy             0.73  0.14 -0.04 0.555 0.44 1.1
love            0.63  0.11  0.00 0.403 0.60 1.1
morality        0.49 -0.19  0.18 0.306 0.69 1.6
nauseated       0.17  0.49 -0.08 0.270 0.73 1.3
odors          -0.11  0.63  0.11 0.425 0.57 1.1
pain            0.21  0.79  0.00 0.662 0.34 1.1
personality     0.54 -0.06  0.27 0.372 0.63 1.5
pleasure        0.60  0.11  0.02 0.375 0.63 1.1
pride           0.77 -0.01 -0.03 0.594 0.41 1.0
reasoning       0.13 -0.02  0.50 0.265 0.73 1.1
recognizing     0.19 -0.15  0.31 0.154 0.85 2.2
remembering     0.10 -0.40  0.41 0.333 0.67 2.1
safe            0.41  0.34  0.30 0.380 0.62 2.8
seeing         -0.13 -0.04  0.25 0.083 0.92 1.6
self_aware      0.11  0.07  0.53 0.303 0.70 1.1
self_restraint  0.28  0.01  0.26 0.144 0.86 2.0
sounds         -0.18  0.03  0.33 0.144 0.86 1.5
temperature    -0.11 -0.15  0.42 0.212 0.79 1.4
thoughts        0.45  0.25  0.31 0.364 0.64 2.4
tired           0.26  0.45 -0.01 0.266 0.73 1.6

                       MR1  MR2  MR3
SS loadings           7.06 4.23 2.79
Proportion Var        0.18 0.11 0.07
Cumulative Var        0.18 0.28 0.35
Proportion Explained  0.50 0.30 0.20
Cumulative Proportion 0.50 0.80 1.00

Mean item complexity =  1.6
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  780  and the objective function was  17.08 with Chi Square of  3157.08
The degrees of freedom for the model are 663  and the objective function was  4.79 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.05 

The harmonic number of observations is  198 with the empirical chi square  788.89  with prob <  0.00052 
The total number of observations was  200  with Likelihood Chi Square =  874.92  with prob <  5.4e-08 

Tucker Lewis Index of factoring reliability =  0.894
RMSEA index =  0.047  and the 90 % confidence intervals are  0.032 0.047
BIC =  -2637.86
Fit based upon off diagonal values = 0.95
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.96 0.96 0.88
Multiple R square of scores with factors       0.91 0.91 0.78
Minimum correlation of possible factor scores  0.82 0.83 0.56

back to TOC

Factor loadings table

Study 3

Study information:

Demographics

back to TOC

Exploratory factor analysis

Step 1: Run maximal EFA (without and with rotation)

 A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
An ultra-Heywood case was detected.  Examine the results carefully A loading greater than abs(1) was detected.  Examine the loadings carefully.The estimated weights for the factor scores are probably incorrect.  Try a different factor extraction method.
An ultra-Heywood case was detected.  Examine the results carefully
Parallel analysis suggests that the number of factors =  3  and the number of components =  3 

Factor Analysis using method =  minres
Call: fa(r = d3_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
              MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry        0.80 -0.10 -0.04 -0.13 -0.05 -0.12 -0.41 -0.12  0.26 -0.21  0.07 -0.11 -0.06 1.00
choices      0.54  0.43  0.21 -0.17 -0.20  0.03 -0.01  0.02 -0.08  0.01 -0.17 -0.02 -0.05 0.63
conscious    0.50  0.45  0.11  0.24  0.47 -0.46 -0.13 -0.07 -0.08  0.09 -0.03  0.01  0.03 1.00
depressed    0.69 -0.24  0.22  0.09 -0.19 -0.18  0.00  0.03  0.13 -0.05 -0.06 -0.01  0.04 0.68
depth        0.35  0.57  0.01  0.62 -0.04  0.32  0.00  0.01  0.22  0.02 -0.03 -0.01  0.02 1.00
disrespected 0.60 -0.24  0.31  0.11 -0.06 -0.17  0.16  0.20  0.12 -0.03  0.09  0.02  0.08 0.66
embarrassed  0.53 -0.18  0.42  0.15  0.02  0.20 -0.05  0.11 -0.05 -0.02  0.16  0.11 -0.06 0.61
fear         0.81 -0.14 -0.28 -0.02  0.07  0.14  0.01 -0.01 -0.05 -0.07  0.06 -0.13 -0.03 0.82
guilt        0.54 -0.36  0.50 -0.20  0.37  0.29 -0.06  0.05  0.10  0.08 -0.20 -0.03  0.01 0.99
happy        0.67 -0.19  0.03 -0.03 -0.25 -0.10  0.06 -0.19  0.02  0.17 -0.12  0.03 -0.05 0.65
hungry       0.75  0.00 -0.56 -0.07  0.11  0.06 -0.04  0.05  0.05  0.10  0.02  0.22 -0.18 1.00
love         0.64 -0.25  0.07  0.03  0.14  0.02  0.30  0.05 -0.20 -0.04  0.08 -0.13 -0.01 0.65
nauseated    0.50  0.06 -0.17 -0.08 -0.12 -0.17  0.02  0.46  0.05 -0.01 -0.07  0.09  0.07 0.56
odors        0.64  0.03 -0.47 -0.20  0.10  0.10  0.06 -0.03  0.16  0.21  0.08 -0.07  0.20 0.82
pain         0.76 -0.16 -0.36  0.18 -0.04  0.10 -0.11 -0.08 -0.30 -0.22 -0.13  0.06  0.15 0.98
pride        0.70 -0.27  0.27  0.04 -0.16 -0.03  0.01 -0.31 -0.08  0.13  0.09  0.13  0.06 0.82
reasoning    0.41  0.69  0.12 -0.28  0.05  0.01  0.39 -0.19  0.14 -0.20  0.01  0.08  0.02 1.00
remembering  0.32  0.52  0.29 -0.28  0.03  0.13 -0.25  0.09 -0.18 -0.02  0.11  0.08  0.05 0.68
temperature  0.39  0.49  0.07 -0.04 -0.26  0.00 -0.10  0.07 -0.14  0.18  0.05 -0.17  0.00 0.56
tired        0.76  0.06 -0.10  0.06  0.03 -0.05  0.17  0.05 -0.09 -0.01 -0.01 -0.10 -0.18 0.68
                 u2 com
angry        0.0032 2.3
choices      0.3732 3.2
conscious    0.0049 4.9
depressed    0.3184 2.0
depth        0.0044 3.5
disrespected 0.3437 2.9
embarrassed  0.3919 3.3
fear         0.1845 1.5
guilt        0.0051 5.2
happy        0.3508 2.0
hungry       0.0042 2.4
love         0.3483 2.4
nauseated    0.4372 2.9
odors        0.1805 3.0
pain         0.0206 2.6
pride        0.1822 2.5
reasoning    0.0048 3.4
remembering  0.3218 4.5
temperature  0.4351 3.6
tired        0.3177 1.4

                       MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           7.52 2.22 1.59 0.82 0.66 0.62 0.58 0.48 0.43 0.29 0.19 0.19 0.16
Proportion Var        0.38 0.11 0.08 0.04 0.03 0.03 0.03 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Var        0.38 0.49 0.57 0.61 0.64 0.67 0.70 0.73 0.75 0.76 0.77 0.78 0.79
Proportion Explained  0.48 0.14 0.10 0.05 0.04 0.04 0.04 0.03 0.03 0.02 0.01 0.01 0.01
Cumulative Proportion 0.48 0.62 0.72 0.77 0.81 0.85 0.89 0.92 0.95 0.97 0.98 0.99 1.00

Mean item complexity =  3
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  190  and the objective function was  11.71 with Chi Square of  1399.04
The degrees of freedom for the model are 8  and the objective function was  0.05 

The root mean square of the residuals (RMSR) is  0 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  128 with the empirical chi square  0.82  with prob <  1 
The total number of observations was  128  with Likelihood Chi Square =  5.27  with prob <  0.73 

Tucker Lewis Index of factoring reliability =  1.059
RMSEA index =  0  and the 90 % confidence intervals are  0 0.077
BIC =  -33.55
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10
Correlation of scores with factors             0.99 0.97 0.97 0.97 0.94 0.96 0.94 0.81 0.91 0.88
Multiple R square of scores with factors       0.98 0.95 0.95 0.94 0.87 0.92 0.88 0.66 0.84 0.78
Minimum correlation of possible factor scores  0.96 0.90 0.89 0.89 0.75 0.84 0.75 0.31 0.67 0.55
                                               MR11 MR12 MR13
Correlation of scores with factors             0.73 0.77 0.76
Multiple R square of scores with factors       0.53 0.60 0.58
Minimum correlation of possible factor scores  0.05 0.19 0.16
Factor Analysis using method =  minres
Call: fa(r = d3_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
              MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry        0.80 -0.10 -0.04 -0.13 -0.05 -0.12 -0.41 -0.12  0.26 -0.21  0.07 -0.11 -0.06 1.00
choices      0.54  0.43  0.21 -0.17 -0.20  0.03 -0.01  0.02 -0.08  0.01 -0.17 -0.02 -0.05 0.63
conscious    0.50  0.45  0.11  0.24  0.47 -0.46 -0.13 -0.07 -0.08  0.09 -0.03  0.01  0.03 1.00
depressed    0.69 -0.24  0.22  0.09 -0.19 -0.18  0.00  0.03  0.13 -0.05 -0.06 -0.01  0.04 0.68
depth        0.35  0.57  0.01  0.62 -0.04  0.32  0.00  0.01  0.22  0.02 -0.03 -0.01  0.02 1.00
disrespected 0.60 -0.24  0.31  0.11 -0.06 -0.17  0.16  0.20  0.12 -0.03  0.09  0.02  0.08 0.66
embarrassed  0.53 -0.18  0.42  0.15  0.02  0.20 -0.05  0.11 -0.05 -0.02  0.16  0.11 -0.06 0.61
fear         0.81 -0.14 -0.28 -0.02  0.07  0.14  0.01 -0.01 -0.05 -0.07  0.06 -0.13 -0.03 0.82
guilt        0.54 -0.36  0.50 -0.20  0.37  0.29 -0.06  0.05  0.10  0.08 -0.20 -0.03  0.01 0.99
happy        0.67 -0.19  0.03 -0.03 -0.25 -0.10  0.06 -0.19  0.02  0.17 -0.12  0.03 -0.05 0.65
hungry       0.75  0.00 -0.56 -0.07  0.11  0.06 -0.04  0.05  0.05  0.10  0.02  0.22 -0.18 1.00
love         0.64 -0.25  0.07  0.03  0.14  0.02  0.30  0.05 -0.20 -0.04  0.08 -0.13 -0.01 0.65
nauseated    0.50  0.06 -0.17 -0.08 -0.12 -0.17  0.02  0.46  0.05 -0.01 -0.07  0.09  0.07 0.56
odors        0.64  0.03 -0.47 -0.20  0.10  0.10  0.06 -0.03  0.16  0.21  0.08 -0.07  0.20 0.82
pain         0.76 -0.16 -0.36  0.18 -0.04  0.10 -0.11 -0.08 -0.30 -0.22 -0.13  0.06  0.15 0.98
pride        0.70 -0.27  0.27  0.04 -0.16 -0.03  0.01 -0.31 -0.08  0.13  0.09  0.13  0.06 0.82
reasoning    0.41  0.69  0.12 -0.28  0.05  0.01  0.39 -0.19  0.14 -0.20  0.01  0.08  0.02 1.00
remembering  0.32  0.52  0.29 -0.28  0.03  0.13 -0.25  0.09 -0.18 -0.02  0.11  0.08  0.05 0.68
temperature  0.39  0.49  0.07 -0.04 -0.26  0.00 -0.10  0.07 -0.14  0.18  0.05 -0.17  0.00 0.56
tired        0.76  0.06 -0.10  0.06  0.03 -0.05  0.17  0.05 -0.09 -0.01 -0.01 -0.10 -0.18 0.68
                 u2 com
angry        0.0032 2.3
choices      0.3732 3.2
conscious    0.0049 4.9
depressed    0.3184 2.0
depth        0.0044 3.5
disrespected 0.3437 2.9
embarrassed  0.3919 3.3
fear         0.1845 1.5
guilt        0.0051 5.2
happy        0.3508 2.0
hungry       0.0042 2.4
love         0.3483 2.4
nauseated    0.4372 2.9
odors        0.1805 3.0
pain         0.0206 2.6
pride        0.1822 2.5
reasoning    0.0048 3.4
remembering  0.3218 4.5
temperature  0.4351 3.6
tired        0.3177 1.4

                       MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           7.52 2.22 1.59 0.82 0.66 0.62 0.58 0.48 0.43 0.29 0.19 0.19 0.16
Proportion Var        0.38 0.11 0.08 0.04 0.03 0.03 0.03 0.02 0.02 0.01 0.01 0.01 0.01
Cumulative Var        0.38 0.49 0.57 0.61 0.64 0.67 0.70 0.73 0.75 0.76 0.77 0.78 0.79
Proportion Explained  0.48 0.14 0.10 0.05 0.04 0.04 0.04 0.03 0.03 0.02 0.01 0.01 0.01
Cumulative Proportion 0.48 0.62 0.72 0.77 0.81 0.85 0.89 0.92 0.95 0.97 0.98 0.99 1.00

Mean item complexity =  3
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  190  and the objective function was  11.71 with Chi Square of  1399.04
The degrees of freedom for the model are 8  and the objective function was  0.05 

The root mean square of the residuals (RMSR) is  0 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  128 with the empirical chi square  0.82  with prob <  1 
The total number of observations was  128  with Likelihood Chi Square =  5.27  with prob <  0.73 

Tucker Lewis Index of factoring reliability =  1.059
RMSEA index =  0  and the 90 % confidence intervals are  0 0.077
BIC =  -33.55
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10
Correlation of scores with factors             0.99 0.97 0.97 0.97 0.94 0.96 0.94 0.81 0.91 0.88
Multiple R square of scores with factors       0.98 0.95 0.95 0.94 0.87 0.92 0.88 0.66 0.84 0.78
Minimum correlation of possible factor scores  0.96 0.90 0.89 0.89 0.75 0.84 0.75 0.31 0.67 0.55
                                               MR11 MR12 MR13
Correlation of scores with factors             0.73 0.77 0.76
Multiple R square of scores with factors       0.53 0.60 0.58
Minimum correlation of possible factor scores  0.05 0.19 0.16
[1] 3
[1] 3

Step 2: Run EFA with varimax rotation

Factor Analysis using method =  minres
Call: fa(r = d3_all, nfactors = nfactors_d3_all, rotate = chosenRotType, 
    fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
               MR1  MR3  MR2   h2   u2 com
angry         0.54 0.50 0.24 0.59 0.41 2.4
choices       0.15 0.26 0.69 0.57 0.43 1.4
conscious     0.22 0.17 0.51 0.34 0.66 1.6
depressed     0.29 0.70 0.12 0.60 0.40 1.4
depth         0.16 0.02 0.51 0.28 0.72 1.2
disrespected  0.18 0.69 0.10 0.52 0.48 1.2
embarrassed   0.06 0.67 0.16 0.48 0.52 1.1
fear          0.78 0.40 0.13 0.78 0.22 1.6
guilt         0.10 0.68 0.04 0.47 0.53 1.0
happy         0.42 0.54 0.13 0.48 0.52 2.0
hungry        0.91 0.12 0.17 0.87 0.13 1.1
love          0.39 0.55 0.05 0.46 0.54 1.8
nauseated     0.42 0.19 0.23 0.26 0.74 2.0
odors         0.74 0.11 0.18 0.59 0.41 1.2
pain          0.72 0.35 0.10 0.65 0.35 1.5
pride         0.28 0.73 0.12 0.63 0.37 1.3
reasoning     0.14 0.02 0.71 0.52 0.48 1.1
remembering  -0.03 0.11 0.65 0.44 0.56 1.1
temperature   0.15 0.06 0.63 0.42 0.58 1.1
tired         0.57 0.39 0.34 0.60 0.40 2.5

                       MR1  MR3  MR2
SS loadings           3.97 3.87 2.72
Proportion Var        0.20 0.19 0.14
Cumulative Var        0.20 0.39 0.53
Proportion Explained  0.38 0.37 0.26
Cumulative Proportion 0.38 0.74 1.00

Mean item complexity =  1.5
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  190  and the objective function was  11.71 with Chi Square of  1399.04
The degrees of freedom for the model are 133  and the objective function was  1.77 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.05 

The harmonic number of observations is  128 with the empirical chi square  98.63  with prob <  0.99 
The total number of observations was  128  with Likelihood Chi Square =  208.44  with prob <  3.2e-05 

Tucker Lewis Index of factoring reliability =  0.909
RMSEA index =  0.074  and the 90 % confidence intervals are  0.049 0.084
BIC =  -436.88
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                MR1  MR3  MR2
Correlation of scores with factors             0.96 0.92 0.90
Multiple R square of scores with factors       0.91 0.85 0.80
Minimum correlation of possible factor scores  0.83 0.70 0.61

back to TOC

Factor loadings table

Subscales

Reliability (and intercorrelations - see alpha)

Call: scoreItems(keys = keys.list, items = d3_all, min = 0, max = 1)

(Unstandardized) Alpha:
      SOUL BODY MIND
alpha 0.87  0.9  0.8

Standard errors of unstandardized Alpha:
       SOUL  BODY  MIND
ASE   0.036 0.032 0.049

Average item correlation:
          SOUL BODY MIND
average.r 0.49 0.57  0.4

 Guttman 6* reliability: 
         SOUL BODY MIND
Lambda.6 0.89 0.92 0.82

Signal/Noise based upon av.r : 
             SOUL BODY MIND
Signal/Noise  6.8  9.1  4.1

Scale intercorrelations corrected for attenuation 
 raw correlations below the diagonal, alpha on the diagonal 
 corrected correlations above the diagonal:
     SOUL BODY MIND
SOUL 0.87 0.72 0.37
BODY 0.63 0.90 0.51
MIND 0.31 0.43 0.80

 In order to see the item by scale loadings and frequency counts of the data
 print with the short option = FALSE
Loading required namespace: GPArotation
Omega 
Call: omega(m = d3_all, plot = F)
Alpha:                 0.91 
G.6:                   0.94 
Omega Hierarchical:    0.63 
Omega H asymptotic:    0.67 
Omega Total            0.94 

Schmid Leiman Factor loadings greater than  0.2 
                g   F1*   F2*   F3*   h2   u2   p2
angry        0.64  0.28  0.30       0.59 0.41 0.69
choices      0.43              0.61 0.57 0.43 0.32
conscious    0.38              0.43 0.34 0.66 0.42
depressed    0.55        0.54       0.60 0.40 0.51
depth        0.26              0.45 0.28 0.72 0.24
disrespected 0.47        0.54       0.52 0.48 0.43
embarrassed  0.40        0.55       0.48 0.52 0.33
fear         0.71  0.49             0.78 0.22 0.65
guilt        0.39        0.56       0.47 0.53 0.33
happy        0.55  0.20  0.37       0.48 0.52 0.64
hungry       0.68  0.64             0.87 0.13 0.52
love         0.52        0.39       0.46 0.54 0.59
nauseated    0.42  0.25             0.26 0.74 0.67
odors        0.57  0.52             0.59 0.41 0.54
pain         0.64  0.46             0.65 0.35 0.64
pride        0.56        0.56       0.63 0.37 0.49
reasoning    0.31              0.64 0.52 0.48 0.18
remembering  0.23              0.61 0.44 0.56 0.12
temperature  0.31              0.57 0.42 0.58 0.23
tired        0.64  0.32        0.21 0.60 0.40 0.69

With eigenvalues of:
  g F1* F2* F3* 
5.1 1.5 2.0 2.0 

general/max  2.49   max/min =   1.36
mean percent general =  0.46    with sd =  0.18 and cv of  0.4 
Explained Common Variance of the general factor =  0.48 

The degrees of freedom are 133  and the fit is  1.77 
The number of observations was  128  with Chi Square =  208.44  with prob <  3.2e-05
The root mean square of the residuals is  0.05 
The df corrected root mean square of the residuals is  0.05
RMSEA index =  0.074  and the 10 % confidence intervals are  0.049 0.084
BIC =  -436.88

Compare this with the adequacy of just a general factor and no group factors
The degrees of freedom for just the general factor are 170  and the fit is  5.11 
The number of observations was  128  with Chi Square =  607.41  with prob <  1.8e-50
The root mean square of the residuals is  0.16 
The df corrected root mean square of the residuals is  0.17 

RMSEA index =  0.149  and the 10 % confidence intervals are  0.13 0.155
BIC =  -217.44 

Measures of factor score adequacy             
                                                 g  F1*  F2*  F3*
Correlation of scores with factors            0.82 0.73 0.80 0.85
Multiple R square of scores with factors      0.67 0.53 0.65 0.72
Minimum correlation of factor score estimates 0.34 0.05 0.29 0.45

 Total, General and Subset omega for each subset
                                                 g  F1*  F2*  F3*
Omega total for total scores and subscales    0.94 0.89 0.88 0.81
Omega general for total scores and subscales  0.63 0.58 0.47 0.20
Omega group for total scores and subscales    0.22 0.31 0.41 0.61

Study 4

Study information:

Demographics

Joining, by = c("character", "min_age", "max_age", "median_age", "mean_age", "sd_age")
Column `character` joining factor and character vector, coercing into character vector

back to TOC

Exploratory factor analysis

Step 1: Run maximal EFA (without and with rotation)

Parallel analysis suggests that the number of factors =  4  and the number of components =  2 

Factor Analysis using method =  minres
Call: fa(r = d4_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
              MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry        0.68 -0.18 -0.41 -0.30  0.12 -0.28  0.04 -0.18  0.14 -0.11  0.13 -0.26  0.06 1.00
choices      0.52  0.13  0.04  0.25  0.03 -0.12 -0.06  0.10  0.01 -0.33 -0.02  0.03  0.08 0.50
conscious    0.55  0.25 -0.29  0.28  0.07  0.02  0.37 -0.18  0.13  0.12 -0.04  0.06 -0.03 0.73
depressed    0.64 -0.25 -0.23  0.13 -0.07 -0.39 -0.15  0.33 -0.03  0.24 -0.09  0.03 -0.14 0.91
depth        0.44  0.34 -0.10  0.07  0.18 -0.14  0.15  0.12 -0.09  0.04  0.19  0.13  0.08 0.48
disrespected 0.67 -0.16 -0.32 -0.08  0.16  0.16 -0.17 -0.08  0.23 -0.12 -0.28  0.18  0.05 0.85
embarrassed  0.56 -0.08  0.14 -0.14  0.19  0.39  0.02  0.16  0.10  0.26 -0.05 -0.17  0.08 0.69
fear         0.64 -0.16  0.46 -0.14 -0.24 -0.16  0.40  0.01  0.25 -0.04 -0.07  0.00 -0.11 1.00
guilt        0.51  0.32 -0.01  0.02 -0.11  0.09 -0.08  0.20 -0.05 -0.10 -0.11 -0.23 -0.12 0.51
happy        0.64 -0.24  0.16  0.33  0.15  0.06 -0.04  0.00  0.02  0.01  0.11 -0.11  0.05 0.65
hungry       0.73 -0.12  0.11 -0.25 -0.03  0.03 -0.06 -0.04 -0.25 -0.13  0.00 -0.05  0.03 0.71
love         0.56 -0.28  0.21  0.33 -0.03 -0.02 -0.06 -0.03  0.06  0.07  0.04  0.02  0.23 0.62
nauseated    0.66 -0.22  0.06 -0.21  0.07  0.20 -0.08  0.19  0.15 -0.11  0.26  0.20 -0.14 0.78
odors        0.61 -0.06  0.06 -0.23 -0.28  0.01  0.09 -0.06 -0.22 -0.02 -0.10  0.08  0.15 0.61
pain         0.50 -0.04 -0.13 -0.09  0.15  0.18  0.09 -0.21 -0.24  0.09  0.03  0.04 -0.16 0.48
pride        0.66 -0.18  0.05  0.39 -0.20  0.09 -0.15 -0.30 -0.12 -0.03  0.03 -0.03 -0.17 0.83
reasoning    0.56  0.52 -0.18 -0.07 -0.51  0.12 -0.19 -0.03  0.18  0.12  0.12  0.01  0.07 1.00
remembering  0.45  0.49  0.46 -0.15  0.31 -0.26 -0.28 -0.23  0.09  0.11 -0.04  0.03 -0.05 1.00
temperature  0.51  0.43  0.01  0.15  0.15  0.14  0.14  0.17 -0.09 -0.16 -0.05 -0.04 -0.03 0.59
tired        0.71  0.01  0.00 -0.13  0.04 -0.11  0.05  0.07 -0.28  0.11 -0.04  0.07  0.07 0.65
                 u2 com
angry        0.0048 3.8
choices      0.5000 2.8
conscious    0.2653 4.3
depressed    0.0876 4.0
depth        0.5197 4.2
disrespected 0.1540 3.2
embarrassed  0.3055 3.7
fear         0.0046 4.0
guilt        0.4854 3.2
happy        0.3467 2.3
hungry       0.2862 1.7
love         0.3829 3.1
nauseated    0.2151 3.0
odors        0.3903 2.5
pain         0.5242 3.2
pride        0.1664 3.0
reasoning    0.0040 4.1
remembering  0.0049 5.9
temperature  0.4090 3.4
tired        0.3511 1.6

                       MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           7.10 1.37 1.01 0.90 0.73 0.67 0.58 0.54 0.51 0.40 0.28 0.27 0.24
Proportion Var        0.36 0.07 0.05 0.04 0.04 0.03 0.03 0.03 0.03 0.02 0.01 0.01 0.01
Cumulative Var        0.36 0.42 0.47 0.52 0.56 0.59 0.62 0.64 0.67 0.69 0.70 0.72 0.73
Proportion Explained  0.49 0.09 0.07 0.06 0.05 0.05 0.04 0.04 0.03 0.03 0.02 0.02 0.02
Cumulative Proportion 0.49 0.58 0.65 0.71 0.76 0.81 0.85 0.88 0.92 0.95 0.97 0.98 1.00

Mean item complexity =  3.3
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  190  and the objective function was  8.6 with Chi Square of  1045.24
The degrees of freedom for the model are 8  and the objective function was  0.03 

The root mean square of the residuals (RMSR) is  0 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  128 with the empirical chi square  1.07  with prob <  1 
The total number of observations was  130  with Likelihood Chi Square =  3.71  with prob <  0.88 

Tucker Lewis Index of factoring reliability =  1.131
RMSEA index =  0  and the 90 % confidence intervals are  0 0.05
BIC =  -35.23
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10
Correlation of scores with factors             0.99 0.95 0.97 0.89 0.96 0.91 0.91 0.87 0.84 0.78
Multiple R square of scores with factors       0.97 0.90 0.94 0.80 0.92 0.82 0.84 0.75 0.71 0.61
Minimum correlation of possible factor scores  0.94 0.81 0.88 0.60 0.83 0.65 0.67 0.51 0.42 0.21
                                               MR11 MR12  MR13
Correlation of scores with factors             0.78 0.76  0.68
Multiple R square of scores with factors       0.60 0.58  0.47
Minimum correlation of possible factor scores  0.20 0.16 -0.07
Factor Analysis using method =  minres
Call: fa(r = d4_all, nfactors = 13, rotate = "none", fm = "minres", 
    cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
              MR1   MR2   MR3   MR4   MR5   MR6   MR7   MR8   MR9  MR10  MR11  MR12  MR13   h2
angry        0.68 -0.18 -0.41 -0.30  0.12 -0.28  0.04 -0.18  0.14 -0.11  0.13 -0.26  0.06 1.00
choices      0.52  0.13  0.04  0.25  0.03 -0.12 -0.06  0.10  0.01 -0.33 -0.02  0.03  0.08 0.50
conscious    0.55  0.25 -0.29  0.28  0.07  0.02  0.37 -0.18  0.13  0.12 -0.04  0.06 -0.03 0.73
depressed    0.64 -0.25 -0.23  0.13 -0.07 -0.39 -0.15  0.33 -0.03  0.24 -0.09  0.03 -0.14 0.91
depth        0.44  0.34 -0.10  0.07  0.18 -0.14  0.15  0.12 -0.09  0.04  0.19  0.13  0.08 0.48
disrespected 0.67 -0.16 -0.32 -0.08  0.16  0.16 -0.17 -0.08  0.23 -0.12 -0.28  0.18  0.05 0.85
embarrassed  0.56 -0.08  0.14 -0.14  0.19  0.39  0.02  0.16  0.10  0.26 -0.05 -0.17  0.08 0.69
fear         0.64 -0.16  0.46 -0.14 -0.24 -0.16  0.40  0.01  0.25 -0.04 -0.07  0.00 -0.11 1.00
guilt        0.51  0.32 -0.01  0.02 -0.11  0.09 -0.08  0.20 -0.05 -0.10 -0.11 -0.23 -0.12 0.51
happy        0.64 -0.24  0.16  0.33  0.15  0.06 -0.04  0.00  0.02  0.01  0.11 -0.11  0.05 0.65
hungry       0.73 -0.12  0.11 -0.25 -0.03  0.03 -0.06 -0.04 -0.25 -0.13  0.00 -0.05  0.03 0.71
love         0.56 -0.28  0.21  0.33 -0.03 -0.02 -0.06 -0.03  0.06  0.07  0.04  0.02  0.23 0.62
nauseated    0.66 -0.22  0.06 -0.21  0.07  0.20 -0.08  0.19  0.15 -0.11  0.26  0.20 -0.14 0.78
odors        0.61 -0.06  0.06 -0.23 -0.28  0.01  0.09 -0.06 -0.22 -0.02 -0.10  0.08  0.15 0.61
pain         0.50 -0.04 -0.13 -0.09  0.15  0.18  0.09 -0.21 -0.24  0.09  0.03  0.04 -0.16 0.48
pride        0.66 -0.18  0.05  0.39 -0.20  0.09 -0.15 -0.30 -0.12 -0.03  0.03 -0.03 -0.17 0.83
reasoning    0.56  0.52 -0.18 -0.07 -0.51  0.12 -0.19 -0.03  0.18  0.12  0.12  0.01  0.07 1.00
remembering  0.45  0.49  0.46 -0.15  0.31 -0.26 -0.28 -0.23  0.09  0.11 -0.04  0.03 -0.05 1.00
temperature  0.51  0.43  0.01  0.15  0.15  0.14  0.14  0.17 -0.09 -0.16 -0.05 -0.04 -0.03 0.59
tired        0.71  0.01  0.00 -0.13  0.04 -0.11  0.05  0.07 -0.28  0.11 -0.04  0.07  0.07 0.65
                 u2 com
angry        0.0048 3.8
choices      0.5000 2.8
conscious    0.2653 4.3
depressed    0.0876 4.0
depth        0.5197 4.2
disrespected 0.1540 3.2
embarrassed  0.3055 3.7
fear         0.0046 4.0
guilt        0.4854 3.2
happy        0.3467 2.3
hungry       0.2862 1.7
love         0.3829 3.1
nauseated    0.2151 3.0
odors        0.3903 2.5
pain         0.5242 3.2
pride        0.1664 3.0
reasoning    0.0040 4.1
remembering  0.0049 5.9
temperature  0.4090 3.4
tired        0.3511 1.6

                       MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10 MR11 MR12 MR13
SS loadings           7.10 1.37 1.01 0.90 0.73 0.67 0.58 0.54 0.51 0.40 0.28 0.27 0.24
Proportion Var        0.36 0.07 0.05 0.04 0.04 0.03 0.03 0.03 0.03 0.02 0.01 0.01 0.01
Cumulative Var        0.36 0.42 0.47 0.52 0.56 0.59 0.62 0.64 0.67 0.69 0.70 0.72 0.73
Proportion Explained  0.49 0.09 0.07 0.06 0.05 0.05 0.04 0.04 0.03 0.03 0.02 0.02 0.02
Cumulative Proportion 0.49 0.58 0.65 0.71 0.76 0.81 0.85 0.88 0.92 0.95 0.97 0.98 1.00

Mean item complexity =  3.3
Test of the hypothesis that 13 factors are sufficient.

The degrees of freedom for the null model are  190  and the objective function was  8.6 with Chi Square of  1045.24
The degrees of freedom for the model are 8  and the objective function was  0.03 

The root mean square of the residuals (RMSR) is  0 
The df corrected root mean square of the residuals is  0.02 

The harmonic number of observations is  128 with the empirical chi square  1.07  with prob <  1 
The total number of observations was  130  with Likelihood Chi Square =  3.71  with prob <  0.88 

Tucker Lewis Index of factoring reliability =  1.131
RMSEA index =  0  and the 90 % confidence intervals are  0 0.05
BIC =  -35.23
Fit based upon off diagonal values = 1
Measures of factor score adequacy             
                                                MR1  MR2  MR3  MR4  MR5  MR6  MR7  MR8  MR9 MR10
Correlation of scores with factors             0.99 0.95 0.97 0.89 0.96 0.91 0.91 0.87 0.84 0.78
Multiple R square of scores with factors       0.97 0.90 0.94 0.80 0.92 0.82 0.84 0.75 0.71 0.61
Minimum correlation of possible factor scores  0.94 0.81 0.88 0.60 0.83 0.65 0.67 0.51 0.42 0.21
                                               MR11 MR12  MR13
Correlation of scores with factors             0.78 0.76  0.68
Multiple R square of scores with factors       0.60 0.58  0.47
Minimum correlation of possible factor scores  0.20 0.16 -0.07
[1] 3
[1] 3

Step 2: Run EFA with varimax rotation

Factor Analysis using method =  minres
Call: fa(r = d4_all, nfactors = nfactors_d4_all, rotate = chosenRotType, 
    fm = "minres", cor = chosenCorType)
Standardized loadings (pattern matrix) based upon correlation matrix
              MR1  MR2  MR3   h2   u2 com
angry        0.64 0.22 0.17 0.48 0.52 1.4
choices      0.16 0.44 0.36 0.35 0.65 2.2
conscious    0.22 0.50 0.23 0.35 0.65 1.8
depressed    0.46 0.19 0.37 0.39 0.61 2.3
depth        0.17 0.54 0.08 0.33 0.67 1.2
disrespected 0.55 0.24 0.27 0.43 0.57 1.8
embarrassed  0.43 0.22 0.26 0.30 0.70 2.2
fear         0.47 0.20 0.34 0.37 0.63 2.2
guilt        0.25 0.54 0.10 0.37 0.63 1.5
happy        0.29 0.19 0.74 0.66 0.34 1.4
hungry       0.72 0.24 0.23 0.63 0.37 1.4
love         0.26 0.09 0.71 0.58 0.42 1.3
nauseated    0.59 0.17 0.30 0.47 0.53 1.6
odors        0.60 0.22 0.14 0.43 0.57 1.4
pain         0.45 0.22 0.14 0.27 0.73 1.7
pride        0.36 0.23 0.57 0.50 0.50 2.1
reasoning    0.32 0.55 0.03 0.40 0.60 1.6
remembering  0.20 0.42 0.10 0.23 0.77 1.6
temperature  0.10 0.71 0.14 0.53 0.47 1.1
tired        0.60 0.37 0.21 0.55 0.45 1.9

                       MR1  MR2  MR3
SS loadings           3.71 2.65 2.24
Proportion Var        0.19 0.13 0.11
Cumulative Var        0.19 0.32 0.43
Proportion Explained  0.43 0.31 0.26
Cumulative Proportion 0.43 0.74 1.00

Mean item complexity =  1.7
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  190  and the objective function was  8.6 with Chi Square of  1045.24
The degrees of freedom for the model are 133  and the objective function was  1.63 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.06 

The harmonic number of observations is  128 with the empirical chi square  129.97  with prob <  0.56 
The total number of observations was  130  with Likelihood Chi Square =  194.94  with prob <  0.00038 

Tucker Lewis Index of factoring reliability =  0.894
RMSEA index =  0.067  and the 90 % confidence intervals are  0.041 0.078
BIC =  -452.45
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                MR1  MR2  MR3
Correlation of scores with factors             0.87 0.85 0.85
Multiple R square of scores with factors       0.76 0.72 0.73
Minimum correlation of possible factor scores  0.53 0.45 0.45

back to TOC

Factor loadings table

Big factor loadings table for all studies (Studies 1-4)

Joining, by = "capacity"
Joining, by = "capacity"
Joining, by = c("order1_manual", "capacity")

Figures

3D scatterplots

Factor loadings for the 40 mental capacities on the three rotated factors in Study 1. Items are colored by their dominant factor loading: Items that loaded most strongly on the body factor (bodily states and will) are in red; items that loaded most strongly on the heart factor (social-emotional experiences and morality) are in blue; and items that loaded most strongly on the mind factor (perceptual-cognitive abilities and goal pursuit) are in green.

Study 1 (adults)

Joining, by = "item"

Study 2 (7-9yo)

Joining, by = "item"

Study 3 (7-9yo)

Joining, by = "item"

Study 4 (4-6yo)

Heatmaps

NOTE: set to 3 factors manually, for now.

Study 1 (adults)

Joining, by = "item"

Study 2 (7-9y)

Joining, by = "item"

Study 3 (7-9y)

Joining, by = "item"

Study 4 (4-6y)

(3 factors by force)

Joining, by = "item"

Mean ratings

Studies 1-2

Mean ratings of 40 mental capacities for the 2 entities included in Studies 1-2. Participants responded on a 3-point scale (0 = “no”, 0.5 = “kinda”, 1 = “yes”). Error bars are nonparametric bootstrapped 95% confidence intervals. Mental capacities are grouped according to their dominant factor loading in Study 1 (adults).

Studies 3-4

Mean ratings of 20 mental capacities for the 9 entities included in Studies 3-4. Participants responded on a 3-point scale (0 = “no”, 0.5 = “kinda”, 1 = “yes”). Error bars are nonparametric bootstrapped 95% confidence intervals. Mental capacities are grouped according to their dominant factor loading in Study 3 (7-9y).

Mean factor scores

Studies 1-2

Joining, by = c("study", "subid", "character", "age", "gender", "ethnicity", "trialNum", "bgColor", "capacity", "capWording", "hoverTime", "rt", "response", "responseNum", "age_group", "responseNumC")
Column `study` joining factors with different levels, coercing to character vectorColumn `character` joining factors with different levels, coercing to character vectorColumn `gender` joining factors with different levels, coercing to character vectorColumn `ethnicity` joining factors with different levels, coercing to character vectorColumn `capWording` joining factors with different levels, coercing to character vectorColumn `response` joining factors with different levels, coercing to character vectorJoining, by = "subid"
Linear mixed model fit by REML ['lmerMod']
Formula: score ~ character * factor * age_group + (1 | subid)
   Data: tempC

REML criterion at convergence: 86761.5

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-4.3061 -0.6245  0.0334  0.6193  3.0480 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.2320   0.4816  
 Residual             0.3495   0.5912  
Number of obs: 47532, groups:  subid, 400

Fixed effects:
                                                Estimate Std. Error t value
(Intercept)                                    -0.001269   0.024249   -0.05
characterrobot                                 -0.248788   0.024249  -10.26
factorfactor1                                   0.007584   0.003837    1.98
factorfactor3                                   0.003174   0.003837    0.83
age_groupchildren                               0.183383   0.024249    7.56
characterrobot:factorfactor1                    0.276372   0.003837   72.02
characterrobot:factorfactor3                    0.373325   0.003837   97.29
characterrobot:age_groupchildren                0.043278   0.024249    1.78
factorfactor1:age_groupchildren                 0.457873   0.003837  119.32
factorfactor3:age_groupchildren                -0.304688   0.003837  -79.40
characterrobot:factorfactor1:age_groupchildren -0.017203   0.003837   -4.48
characterrobot:factorfactor3:age_groupchildren -0.027872   0.003837   -7.26

Correlation of Fixed Effects:
            (Intr) chrctr fctrf1 fctrf3 ag_grp chrc:1 chrc:3 chrc:_ fct1:_ fct3:_ ch:1:_
charactrrbt  0.010                                                                      
factorfctr1  0.000  0.000                                                               
factorfctr3  0.000  0.000 -0.500                                                        
ag_grpchldr  0.001  0.030  0.000  0.000                                                 
chrctrrbt:1  0.000  0.000  0.013 -0.006  0.000                                          
chrctrrbt:3  0.000  0.000 -0.006  0.013  0.000 -0.500                                   
chrctrrbt:_  0.030  0.001  0.000  0.000  0.010  0.000  0.000                            
fctrfctr1:_  0.000  0.000 -0.002  0.001  0.000  0.033 -0.016  0.000                     
fctrfctr3:_  0.000  0.000  0.001 -0.002  0.000 -0.016  0.033  0.000 -0.500              
chrctrr:1:_  0.000  0.000  0.033 -0.016  0.000 -0.002  0.001  0.000  0.013 -0.006       
chrctrr:3:_  0.000  0.000 -0.016  0.033  0.000  0.001 -0.002  0.000 -0.006  0.013 -0.500

Study 3

Studies 3-4

Factor scores by age

Study 1

Joining, by = "subid"

Study 2

Joining, by = "subid"

Studies 1-2

Joining, by = "subid"
Ignoring unknown aesthetics: y

Studies 3-4

Joining, by = c("age_group", "subid", "age", "character")
Column `character` joining factors with different levels, coercing to character vectorJoining, by = "subid"

LS0tCnRpdGxlOiAiRGlta2lkIENvZ1NjaSAyMDE3IChXZWlzbWFuLCBEd2VjaywgJiBNYXJrbWFuLCBDb2dTY2kgMjAxNykiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdGhlbWU6IGZsYXRseQogICAgdG9jOiB5ZXMKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICBwZGZfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwotLS0KCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQpgYGAKCiMgU2V0dXAKCmBgYHtyIHdvcmtzcGFjZSBzZXR1cH0KIyBsb2FkIGxpYnJhcmllcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShwc3ljaCkKbGlicmFyeShsYW5nY29nKSAjIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2xhbmdjb2cvbGFuZ2NvZwpsaWJyYXJ5KFJDb2xvckJyZXdlcikKbGlicmFyeShwbG90bHkpCmxpYnJhcnkobHVicmlkYXRlKQoKIyBjbGVhciB3b3Jrc3BhY2UKcm0obGlzdCA9IGxzKGFsbCA9IFQpKQpncmFwaGljcy5vZmYoKQpgYGAKCmBgYHtyIGZ1bmN0aW9uc30KIyBtYWtlIG5hLnJtID0gVCB2ZXJzaW9ucyBvZiBzdW1tYXJ5IGZ1bmN0aW9ucwptZWFuX25hIDwtIGZ1bmN0aW9uKHgpIHttZWFuKHgsIG5hLnJtID0gVCl9CmNpX2xvd2VyX25hIDwtIGZ1bmN0aW9uKHgpIHtxdWFudGlsZSh4LCAwLjAyNSwgbmEucm0gPSBUKX0KY2lfdXBwZXJfbmEgPC0gZnVuY3Rpb24oeCkge3F1YW50aWxlKHgsIDAuOTc1LCBuYS5ybSA9IFQpfQoKIyBtYWtlIHJvdW5kaW5nIGZ1bmN0aW9uCnJvdW5kMiA8LSBmdW5jdGlvbih4KSB7Zm9ybWF0KHJvdW5kKHgsIDIpLCBuc21hbGwgPSAyKX0KCiMgbWFrZSBjbGVhbnVwIGZ1bmN0aW9uCmNsZWFudXAgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSwgYWdlX2dyb3VwKSB7CiAgaWYoZ3JlcGwoImFkdWx0IiwgYWdlX2dyb3VwKSkgewogICAgCiAgICAjIHNldCB0YXJnZXQgZGF0YXNldAogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZF9yYXdfc3R1ZHkxfQogICAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWIiKXtkIDwtIGRfcmF3X3N0dWR5MWJ9CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYyIpe2QgPC0gZF9yYXdfc3R1ZHkxY30KICAgIAogICAgIyBlbmFjdCBleGNsdXNpb25hcnkgY3JpdGVyaWEKICAgIGRfY2xlYW5fMSA8LSBkCiAgICAKICAgICMgcmVjb2RlIGJhY2tncm91bmQgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcwogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzEgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpKSAlPiUKICAgICAgbXV0YXRlKCAjIGRlYWwgd2l0aCByYWNlCiAgICAgICAgcmFjZV9jYXQyID0gZmFjdG9yKHN1YigiICskIiwgIiIsIGV0aG5pY2l0eSkpLAogICAgICAgIHJhY2VfY2F0MyA9IGZhY3RvcihpZmVsc2UoZ3JlcGwoIiAiLCByYWNlX2NhdDIpID09IFQsICJtdWx0aXJhY2lhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmFjZV9jYXQyKSkpKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzdHVkeSwgc3ViaWQ6Y291bnRyeV9zZWxmcmVwLCBhZ2VfZ3JvdXAsIHJhY2VfY2F0MykgJT4lCiAgICAgIHJlbmFtZShyYWNlX2NhdCA9IHJhY2VfY2F0MykgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggcmVsaWdpb24gKG5vdGU6IG9ubHkgZGVhbGluZyB3aXRoIGNoaWxkaG9vZCByZWxpZ2lvbiBmb3Igbm93KQogICAgICAgIHJlbGlnaW9uX2NhdDIgPSBmYWN0b3Ioc3ViKCIgKyQiLCAiIiwgcmVsaWdpb25DaGlsZCkpLAogICAgICAgIHJlbGlnaW9uX2NhdDMgPSBmYWN0b3IoaWZlbHNlKGdyZXBsKCIgIiwgcmVsaWdpb25fY2F0MikgPT0gVCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcmVsaWdpb3VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcy5jaGFyYWN0ZXIocmVsaWdpb25fY2F0MikpKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc3R1ZHk6cmFjZV9jYXQsIHJlbGlnaW9uX2NhdDMpICU+JQogICAgICByZW5hbWUocmVsaWdpb25fY2F0ID0gcmVsaWdpb25fY2F0MykKICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8xKQogIH0KICAKICBpZihncmVwbCgiY2hpbGQiLCBhZ2VfZ3JvdXApKSB7CiAgICAKICAgICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkX3Jhd19zdHVkeTJ9CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkX3Jhd19zdHVkeTN9CiAgICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkX3Jhd19zdHVkeTR9CiAgICAKICAgICMgcmVjb2RlIGJhY2tncm91bmQgYW5kIGRlbW9ncmFwaGljIHZhcmlhYmxlcwogICAgZF9jbGVhbl8yIDwtIGQgJT4lCiAgICAgIG11dGF0ZSggIyBkZWFsIHdpdGggc3R1ZHkgbnVtYmVyCiAgICAgICAgc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpLAogICAgICAgIHJlc3BvbnNlTnVtID0gaWZlbHNlKCFpcy5uYShyZXNwb25zZU51bSksIHJlc3BvbnNlTnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShyZXNwb25zZSA9PSAibm8iLCAwLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHJlc3BvbnNlID09ICJraW5kYSIsIDAuNSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UocmVzcG9uc2UgPT0gInllcyIsIDEsIE5BKSkpKSkKICAgICMgTk9URTogbmVlZCB0byByZWNvbmNpbGUgcmFjZS9ldGhuaWNpdHkgYXQgc29tZSBwb2ludC4uLgogICAgIyBOT1RFOiBuZWVkIHRvIGRlYWwgd2l0aCBnZW5kZXIgYXQgc29tZSBwb2ludC4uLgogIAogICAgZF9jbGVhbiA8LSBkX2NsZWFuXzIKICAgIAogICAgIyByZW1vdmUgZXh0cmFuZW91cyBkZnMgYW5kIHZhcmlhYmxlcwogICAgcm0oZCwgZF9jbGVhbl8yKQogIH0KICAKICAjIHJlbW92ZSBvdXRsaWVycyBpZiBkZXNpcmVkCiAgaWYoY2hvc2VuT3V0bGllckhhbmRsaW5nID09ICJyZW1vdmUiKSB7CiAgICAKICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgZ2F0aGVyKGNhcGFjaXR5LCBzY29yZSwgaGFwcHk6cHJpZGUpICU+JQogICAgICBncm91cF9ieShjaGFyYWN0ZXIsIGNhcGFjaXR5KSAlPiUKICAgICAgZmlsdGVyKCFzY29yZSAlaW4lIGJveHBsb3Quc3RhdHMoc2NvcmUsIDIuNSkkb3V0KSAlPiUKICAgICAgc3ByZWFkKGNhcGFjaXR5LCBzY29yZSkgJT4lCiAgICAgIGFycmFuZ2UoY2hhcmFjdGVyLCBzdWJpZCkKICAgIAogIH0KICAKICAjIGZpbHRlciBjaGFyYWN0ZXJzIGlmIGRlc2lyZWQKICBpZihpcy5lbGVtZW50KCJub25lIiwgY2hvc2VuRXhjbHVkZSkpIHt9IGVsc2UgewogICAgCiAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgIGZpbHRlcighY2hhcmFjdGVyICVpbiUgY2hvc2VuRXhjbHVkZSkKICAgIAogICAgfQogICAgCiAgIyBmaWx0ZXIgaXRlbXMgaWYgZGVzaXJlZAogIGlmKGlzLmVsZW1lbnQoIm5vbmUiLCBjaG9zZW5FeGNsdWRlSXRlbSkpIHt9IGVsc2UgewogICAgZF9jbGVhbiA8LSBkX2NsZWFuICU+JQogICAgICBkcGx5cjo6ZmlsdGVyKCFjYXBhY2l0eSAlaW4lIGNob3NlbkV4Y2x1ZGVJdGVtKQogIH0KICAKICAjIGRyb3AgdHJpYWxzIDwyNTAgbXMKICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICBmaWx0ZXIocnQgPj0gMjUwIHwgaXMubmEocnQpKQogIAogICMgY2VudGVyIHJlc3BvbnNlIHZhcmlhYmxlCiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWIiKSB7CiAgICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICAgIG11dGF0ZShyZXNwb25zZU51bUMgPSByZXNwb25zZU51bSAtIDQpCiAgfSBlbHNlIHsKICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUKICAgICAgbXV0YXRlKHJlc3BvbnNlTnVtQyA9IHJlc3BvbnNlTnVtIC0gMC41KQogIH0KCiAgICAjIHJlbmFtZSBjaGFyYWN0ZXIgbmFtZSB2YXJpYWJsZXMKICBpZigiY2hhck5hbWUiICVpbiUgbmFtZXMoZF9jbGVhbikpIHsKICAgIGRfY2xlYW4gPC0gZF9jbGVhbiAlPiUgcmVuYW1lKGNoYXJhY3RlciA9IGNoYXJOYW1lKQogIH0KICAKICAjIGNsZWFudXAKICBkX2NsZWFuIDwtIGRfY2xlYW4gJT4lCiAgICBmaWx0ZXIoIWlzLm5hKHN1YmlkKSwgIWlzLm5hKGNoYXJhY3RlciksICFpcy5uYShjYXBhY2l0eSkpCiAgCiAgIyByZXR1cm4gY2xlYW5lZCBkYXRhc2V0CiAgcmV0dXJuKGRfY2xlYW4pCn0KCiMgbWFrZSBmdW5jdGlvbiBmb3Igc3RyaXBwaW5nIGRhdGFmcmFtZXMgZm9yIGRpbWVuc2lvbiByZWR1Y2F0aW9uCm1ha2VEUkRGIDwtIGZ1bmN0aW9uKGRhdGFzb3VyY2UsIGNob3NlbkNvbmRpdGlvbikgewogIAogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWIiKXtkIDwtIGQxYn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYyIpe2QgPC0gZDFjfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGZpbHRlciBieSBjaGFyYWN0ZXIgaWYgc3BlY2lmaWVkCiAgaWYoY2hvc2VuQ29uZGl0aW9uICVpbiUgYygiYmVldGxlIiwgInJvYm90IikpIHsKICAgIGQgPC0gZCAlPiUgZmlsdGVyKGNoYXJhY3RlciA9PSBjaG9zZW5Db25kaXRpb24pCiAgfQoKICAjIG1ha2Ugc3RyaXBwZWQgZGF0YWZyYW1lIGZvciBkaW1lbnNpb24gcmVkdWNhdGlvbiBhbmFseXNlcwogIGRfc3RyaXAgPC0gZCAlPiUKICAgIGZpbHRlcighaXMubmEoY2hhcmFjdGVyKSwgIWlzLm5hKHN1YmlkKSwgIWlzLm5hKGNhcGFjaXR5KSwgY2FwYWNpdHkgIT0gIiIpICU+JQogICAgbXV0YXRlKHN1YmlkID0gcGFzdGUoY2hhcmFjdGVyLCBzdWJpZCwgc2VwID0gIl8iKSkgJT4lCiAgICBzZWxlY3Qoc3ViaWQsIGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgICBzcHJlYWQoY2FwYWNpdHksIHJlc3BvbnNlTnVtKSAlPiUKICAgIHJlbW92ZV9yb3duYW1lcygpICU+JQogICAgY29sdW1uX3RvX3Jvd25hbWVzKHZhciA9ICJzdWJpZCIpCgogICMgcmV0dXJuIHN0cmlwcGVkIGRhdGFmcmFtZQogIHJldHVybihkX3N0cmlwKQp9CgojIG1ha2UgZGVtb2dyYXBoaWNzIGZ1bmN0aW9ucwpkZW1vU2FtcGxlU2l6ZSA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWIiKXtkIDwtIGQxYn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYyIpe2QgPC0gZDFjfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCBkaXN0aW5jdCBzdWJpZHMKICBzYW1wbGVfc2l6ZSA8LSBkICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyKSAlPiUgY291bnQoY2hhcmFjdGVyKSAlPiUgZGF0YS5mcmFtZSgpCgogICMgYWRkIHRvdGFsIHNhbXBsZSBzaXplICAKICBzYW1wbGVfc2l6ZSA8LSByYmluZChzYW1wbGVfc2l6ZSAlPiUgbXV0YXRlKGNoYXJhY3RlciA9IGFzLmNoYXJhY3RlcihjaGFyYWN0ZXIpKSwKICAgICAgICAgICAgICAgICAgICAgICBjKGNoYXJhY3RlciA9ICJhbGwiLCBuID0gZCAlPiUgZGlzdGluY3Qoc3ViaWQpICU+JSBjb3VudCgpICU+JSBhcy5udW1lcmljKCkpKQogIAogICMgcmV0dXJuIGRhdGFmcmFtZQogIHJldHVybihzYW1wbGVfc2l6ZSkKfQpkZW1vRHVyYXRpb24gPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIil7ZCA8LSBkMWJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWMiKXtkIDwtIGQxY30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNoYXJhY3RlcgogIGR1cmF0aW9uIDwtIGQgJT4lCiAgICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBkdXJhdGlvbikgJT4lCiAgICBtdXRhdGUoZHVyYXRpb24gPSBhcy5udW1lcmljKGR1cmF0aW9uKSkgJT4lCiAgICBncm91cF9ieShjaGFyYWN0ZXIpICU+JQogICAgc3VtbWFyaXNlKG1pbl9kdXJhdGlvbiA9IG1pbihkdXJhdGlvbiwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtYXhfZHVyYXRpb24gPSBtYXgoZHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVkaWFuX2R1cmF0aW9uID0gbWVkaWFuKGR1cmF0aW9uLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIG1lYW5fZHVyYXRpb24gPSBtZWFuKGR1cmF0aW9uLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIHNkX2R1cmF0aW9uID0gc2QoZHVyYXRpb24sIG5hLnJtID0gVCkpCgogICMgYWRkIHRvdGFsIGR1cmF0aW9uCiAgYWxsIDwtIGQgJT4lCiAgICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBkdXJhdGlvbikgJT4lCiAgICBtdXRhdGUoZHVyYXRpb24gPSBhcy5udW1lcmljKGR1cmF0aW9uKSkgJT4lCiAgICBzdW1tYXJpc2UobWluX2R1cmF0aW9uID0gbWluKGR1cmF0aW9uLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIG1heF9kdXJhdGlvbiA9IG1heChkdXJhdGlvbiwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtZWRpYW5fZHVyYXRpb24gPSBtZWRpYW4oZHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVhbl9kdXJhdGlvbiA9IG1lYW4oZHVyYXRpb24sIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgc2RfZHVyYXRpb24gPSBzZChkdXJhdGlvbiwgbmEucm0gPSBUKSkgJT4lCiAgICBtdXRhdGUoY2hhcmFjdGVyID0gImFsbCIpCiAgCiAgZHVyYXRpb24gPC0gcmJpbmQoZHVyYXRpb24sIGFsbCkgIyBub3Qgc3VyZSB3aHkgZnVsbF9qb2luIGRvZXNuJ3Qgd29yayAgICAKCiAgIyByZXR1cm4gZGF0YWZyYW1lCiAgcmV0dXJuKGR1cmF0aW9uKQp9CmRlbW9BZ2UgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIil7ZCA8LSBkMWJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWMiKXtkIDwtIGQxY30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgc2FtcGxlIHNpemUgcGVyIGNoYXJhY3RlcgogIGFnZSA8LSBkICU+JQogICAgZGlzdGluY3Qoc3ViaWQsIGNoYXJhY3RlciwgYWdlKSAlPiUKICAgIG11dGF0ZShhZ2UgPSBhcy5udW1lcmljKGFnZSkpICU+JQogICAgZ3JvdXBfYnkoY2hhcmFjdGVyKSAlPiUKICAgIHN1bW1hcmlzZShtaW5fYWdlID0gbWluKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtYXhfYWdlID0gbWF4KGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtZWRpYW5fYWdlID0gbWVkaWFuKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBtZWFuX2FnZSA9IG1lYW4oYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgIHNkX2FnZSA9IHNkKGFnZSwgbmEucm0gPSBUKSkKCiAgIyBhZGQgdG90YWwgYWdlCiAgYWxsIDwtIGQgJT4lCiAgICBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBhZ2UpICU+JQogICAgbXV0YXRlKGFnZSA9IGFzLm51bWVyaWMoYWdlKSkgJT4lCiAgICBzdW1tYXJpc2UobWluX2FnZSA9IG1pbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWF4X2FnZSA9IG1heChhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVkaWFuX2FnZSA9IG1lZGlhbihhZ2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgICAgbWVhbl9hZ2UgPSBtZWFuKGFnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICBzZF9hZ2UgPSBzZChhZ2UsIG5hLnJtID0gVCkpICU+JQogICAgbXV0YXRlKGNoYXJhY3RlciA9ICJhbGwiKQogIGFnZSA8LSBmdWxsX2pvaW4oYWdlLCBhbGwpCgogICMgcmV0dXJuIGRhdGFmcmFtZQogIHJldHVybihhZ2UpCn0KZGVtb0dlbmRlciA8LSBmdW5jdGlvbihkYXRhc291cmNlKSB7CgogICMgc2V0IHRhcmdldCBkYXRhc2V0CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMSIpe2QgPC0gZDF9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWIiKXtkIDwtIGQxYn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAxYyIpe2QgPC0gZDFjfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDIiKXtkIDwtIGQyfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDMiKXtkIDwtIGQzfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDQiKXtkIDwtIGQ0fQoKICAjIGdldCBnZW5kZXIgcGVyIGNoYXJhY3RlciBhbmQgb3ZlcmFsbAogIGdlbmRlciA8LSBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCBnZW5kZXIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUoY2hhcmFjdGVyLCBnZW5kZXIpKSkpICU+JQogICAgZmlsdGVyKGdlbmRlciAhPSAiU3VtIikgJT4lCiAgICByZW5hbWUobiA9IEZyZXEpCiAgCiAgZ2VuZGVyIDwtIGdlbmRlciAlPiUKICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoaWZlbHNlKGNoYXJhY3RlciA9PSAiU3VtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGwiLCBhcy5jaGFyYWN0ZXIoY2hhcmFjdGVyKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImJlZXRsZSIsICJyb2JvdCIsICJhbGwiKSkpICU+JQogICAgYXJyYW5nZShjaGFyYWN0ZXIsIGdlbmRlcikgJT4lCiAgICBzcHJlYWQoZ2VuZGVyLCBuKQogIAogICMgcmV0dXJuIGRhdGFmcmFtZQogIHJldHVybihnZW5kZXIpCn0KZGVtb1JhY2UgPC0gZnVuY3Rpb24oZGF0YXNvdXJjZSkgewoKICAjIHNldCB0YXJnZXQgZGF0YXNldAogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDEiKXtkIDwtIGQxfQogIGlmKGRhdGFzb3VyY2UgPT0gInN0dWR5IDFiIil7ZCA8LSBkMWJ9CiAgaWYoZGF0YXNvdXJjZSA9PSAic3R1ZHkgMWMiKXtkIDwtIGQxY30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAyIil7ZCA8LSBkMn0KICBpZihkYXRhc291cmNlID09ICJzdHVkeSAzIil7ZCA8LSBkM30KICBpZihkYXRhc291cmNlID09ICJzdHVkeSA0Iil7ZCA8LSBkNH0KCiAgIyBnZXQgcmFjZSBwZXIgY2hhcmFjdGVyIGFuZCBvdmVyYWxsCiAgcmFjZSA8LSBkYXRhLmZyYW1lKGFkZG1hcmdpbnMod2l0aChkICU+JSBkaXN0aW5jdChzdWJpZCwgY2hhcmFjdGVyLCByYWNlX2NhdCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUoY2hhcmFjdGVyLCByYWNlX2NhdCkpKSkgJT4lCiAgICBmaWx0ZXIocmFjZV9jYXQgIT0gIlN1bSIpICU+JQogICAgcmVuYW1lKG4gPSBGcmVxKQoKICAgIHJhY2UgPC0gcmFjZSAlPiUKICAgICAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihpZmVsc2UoY2hhcmFjdGVyID09ICJTdW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiwgYXMuY2hhcmFjdGVyKGNoYXJhY3RlcikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImJlZXRsZSIsICJyb2JvdCIsICJhbGwiKSkpICU+JQogICAgICBhcnJhbmdlKGNoYXJhY3RlciwgcmFjZV9jYXQpICU+JQogICAgICBzcHJlYWQocmFjZV9jYXQsIG4pCiAgCiAgIyByZXR1cm4gZGF0YWZyYW1lCiAgcmV0dXJuKHJhY2UpCn0KCiMgcGxvdHRpbmcgZnVuY3Rpb25zCm1ha2VGYWNldExhYnMgPC0gZnVuY3Rpb24oZGZfcGxvdHRpbmcpIHsKICBmYWNldF9sYWJlbHMgPC0gYXJyYXkoKQogIGRmX3Bsb3R0aW5nIDwtIGRmX3Bsb3R0aW5nICU+JSBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpCiAgZm9yKGkgaW4gMTpsZW5ndGgobGV2ZWxzKGRmX3Bsb3R0aW5nJGNoYXJhY3RlcikpKSB7CiAgICBkZiA8LSBkZl9wbG90dGluZyAlPiUgZmlsdGVyKGNoYXJhY3RlciA9PSBsZXZlbHMoZGZfcGxvdHRpbmckY2hhcmFjdGVyKVtpXSkgJT4lCiAgICAgIHNlbGVjdChjaGFyYWN0ZXIsIG4pICU+JSB1bmlxdWUoKQogICAgZmFjZXRfbGFiZWxzW2ldIDwtIHBhc3RlMChkZiRjaGFyYWN0ZXIsICIgKG4gPSAiLCBkZiRuLCAiKSIpCiAgfQogIG5hbWVzKGZhY2V0X2xhYmVscykgPC0gbGV2ZWxzKGRmX3Bsb3R0aW5nJGNoYXJhY3RlcikKICByZXR1cm4oZmFjZXRfbGFiZWxzKQp9CmBgYAoKYGBge3IgbW9kZWxpbmcgZGVjaXNpb25zfQojIHJlbW92ZSBvdXRsaWVycz8KY2hvc2VuT3V0bGllckhhbmRsaW5nIDwtICJrZWVwIgojIGNob3Nlbk91dGxpZXJIYW5kbGluZyA8LSAicmVtb3ZlIgoKIyBleGNsdWRlIGFueSBjb25kaXRpb25zIChjaGFyYWN0ZXJzKT8KY2hvc2VuRXhjbHVkZSA8LSAibm9uZSIKIyBjaG9zZW5FeGNsdWRlIDwtIGMoInN0YXBsZXIiLCAiY2FyIiwgImNvbXB1dGVyIikKCiMgZXhjbHVkZSBhbnkgaXRlbXMgKG1lbnRhbCBjYXBhY2l0aWVzKT8KIyBjaG9zZW5FeGNsdWRlSXRlbSA8LSAibm9uZSIKIyBjaG9zZW5FeGNsdWRlSXRlbSA8LSAiY29tcHV0YXRpb25zIgpjaG9zZW5FeGNsdWRlSXRlbSA8LSBjKCJtZXRhbCIsICJvbl9vZmYiKQoKIyBOT1RFOiBhbHdheXMgY2hvb3NlIG1pbmltYWwgcmVzaWR1YWwgKGZtID0gIm1pbnJlcyIpIGluc3RlYWQgb2YgTUwgYmVjYXVzZSBvZiBub24tbm9ybWFsaXR5CgojIGZvciBFRkFzLCB3aGF0IGtpbmQgb2YgY29ycmVsYXRpb24/CmNob3NlbkNvclR5cGUgPC0gImNvciIgIyBwZWFyc29uIGNvcnJlbGF0aW9uCiMgY2hvc2VuQ29yVHlwZSA8LSAicG9seSIgIyBwb2x5Y2hvcmljIGNvcnJlbGF0aW9uCgojIGZvciBFRkFzLCB3aGF0IGtpbmQgb2Ygcm90YXRpb24/CmNob3NlblJvdFR5cGUgPC0gInZhcmltYXgiICMgdmFyaW1heCByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm9ibGltaW4iICMgb2JsaW1pbiByb3RhdGlvbgojIGNob3NlblJvdFR5cGUgPC0gIm5vbmUiICMgbm8gcm90YXRpb24KCmRhdGEuZnJhbWUoImNvbmRpdGlvbnNFeGNsdWRlZCIgPSBjaG9zZW5FeGNsdWRlLAogICAgICAgICAgICJvdXRsaWVySGFuZGxpbmciID0gY2hvc2VuT3V0bGllckhhbmRsaW5nLAogICAgICAgICAgICJFRkFfY29ycmVsYXRpb24iID0gY2hvc2VuQ29yVHlwZSwKICAgICAgICAgICAiRUZBX3JvdGF0aW9uIiA9IGNob3NlblJvdFR5cGUpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMgRGF0YSBwcmVwYXJhdGlvbgoKYGBge3IgZGF0YSB1cGxvYWR9CiMgc3R1ZHkgMSAoMjAxNi0wNy0wNiwgYWR1bHRzLCAyIGNvbmRpdGlvbnMsIDMtcG9pbnQgc2NhbGUsICJkZWNpZGUgd2hhdCB0byBkbyIgYW5kICJtYWtlIHBsYW5zIikKZF9yYXdfc3R1ZHkxIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDFfMjAxNi0wNi0wNV9hbm9ueW1pemVkLmNzdiIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxIiwgYWdlX2dyb3VwID0gImFkdWx0cyIpICU+JSBzZWxlY3QoLVgpCgojIHN0dWR5IDFiICgyMDE3LTA3LTE5LCBhZHVsdHMsIDIgY29uZGl0aW9ucywgNy1wb2ludCBzY2FsZSwgImRlY2lkZSB3aGF0IHRvIGRvIiBhbmQgIm1ha2UgcGxhbnMiKQpkX3Jhd19zdHVkeTFiIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDJfMjAxNi0wNy0xOV9hbm9ueW1pemVkLmNzdiIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxYiIsIGFnZV9ncm91cCA9ICJhZHVsdHMiKSAlPiUgc2VsZWN0KC1YKQoKIyBzdHVkeSAxYyAoMjAxNi0xMi0wOCwgYWR1bHRzLCAyIGNvbmRpdGlvbnMsIDMtcG9pbnQgc2NhbGUsICJoYXZlIGZyZWUgd2lsbCIgYW5kICJoYXZlIGludGVudGlvbnMiKQpkX3Jhd19zdHVkeTFjIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2FkdWx0cy91c19ydW4tMDNfMjAxNi0xMi0wOF9hbm9ueW1pemVkLmNzdiIpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxYyIsIGFnZV9ncm91cCA9ICJhZHVsdHMiKSAlPiUgc2VsZWN0KC1YKQoKIyBzdHVkeSAyIChKdW5lIC0gRGVjZW1iZXIgMjAxNiwgNy05eW8sIDIgY29uZGl0aW9ucywgMy1wb2ludC1zY2FsZSwgImRlY2lkZSB3aGF0IHRvIGRvIiBhbmQgIm1ha2UgcGxhbnMiKQpkX3Jhd19zdHVkeTIgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAxXzIwMTctMDctMjRfYW5vbnltaXplZC5jc3YiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMiIsIGFnZV9ncm91cCA9ICJjaGlsZHJlbl83OSIpICU+JSBzZWxlY3QoLVgpCgojIHN0dWR5IDMgKEphbnVhcnkgLSBKdW5lIDIwMTcsIDctOXlvLCA5IGNvbmRpdGlvbnMsIDMtcG9pbnQtc2NhbGUsICJkZWNpZGUgd2hhdCB0byBkbyIgYW5kICJtYWtlIHBsYW5zIikKZF9yYXdfc3R1ZHkzIDwtIHJlYWQuY3N2KCIvVXNlcnMva3dlaXNtYW4vRG9jdW1lbnRzL1Jlc2VhcmNoIChTdGFuZm9yZCkvUHJvamVjdHMvRGlta2lkL2RpbWtpZC9kYXRhL2NoaWxkcmVuL3J1bi0wMl8yMDE3LTA4LTA4X2Fub255bWl6ZWQuY3N2IikgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDMiLCBhZ2VfZ3JvdXAgPSAiY2hpbGRyZW5fNzkiKSAlPiUgc2VsZWN0KC1YKSAlPiUKICBtdXRhdGUoZG9iID0gcGFyc2VfZGF0ZXRpbWUoZGF0ZU9mQmlydGgsICIlbS8lZC8leSIpLAogICAgICAgICBkb3QgPSBwYXJzZV9kYXRldGltZShnc3ViKCIyMDE3IiwgIjE3IiwgZGF0ZU9mVGVzdCksICIlbS8lZC8leSIpLCAKICAgICAgICAgYWdlID0gaW50ZXJ2YWwoc3RhcnQgPSBkb2IsIGVuZCA9IGRvdCkgLyBkdXJhdGlvbihudW0gPSAxLCB1bml0cyA9ICJ5ZWFycyIpKSAlPiUKICBzZWxlY3QoLWRhdGVPZkJpcnRoLCAtZGF0ZU9mVGVzdCwgLWRvYiwgLWRvdCkKCiMgc3R1ZHkgNCAoTWFyeSAyMDE3IC0gcHJlc2VudCwgNC02eW8sIDkgY29uZGl0aW9ucywgMy1wb2ludC1zY2FsZSwgImRlY2lkZSB3aGF0IHRvIGRvIiBhbmQgIm1ha2UgcGxhbnMiKQpkX3Jhd19zdHVkeTQgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAzXzIwMTctMDgtMTBfYW5vbnltaXplZC5jc3YiKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgNCIsIGFnZV9ncm91cCA9ICJjaGlsZHJlbl80NiIpICU+JSBzZWxlY3QoLVgpICU+JQogIG11dGF0ZShkb2IgPSBwYXJzZV9kYXRldGltZShkYXRlT2ZCaXJ0aCwgIiVtLyVkLyV5IiksCiAgICAgICAgIGRvdCA9IHBhcnNlX2RhdGV0aW1lKGdzdWIoIjIwMTciLCAiMTciLCBkYXRlT2ZUZXN0KSwgIiVtLyVkLyV5IiksIAogICAgICAgICBhZ2UgPSBpbnRlcnZhbChzdGFydCA9IGRvYiwgZW5kID0gZG90KSAvIGR1cmF0aW9uKG51bSA9IDEsIHVuaXRzID0gInllYXJzIikpICU+JQogIHNlbGVjdCgtZGF0ZU9mQmlydGgsIC1kYXRlT2ZUZXN0LCAtZG9iLCAtZG90KQpgYGAKCmBgYHtyIGRhdGEgY2xlYW51cH0KIyBjbGVhbiB1cCBkYXRhc2V0cwpkMSA8LSBjbGVhbnVwKCJzdHVkeSAxIiwgImFkdWx0cyIpCmQxYiA8LSBjbGVhbnVwKCJzdHVkeSAxIiwgImFkdWx0cyIpCmQxYyA8LSBjbGVhbnVwKCJzdHVkeSAxIiwgImFkdWx0cyIpCmQyIDwtIGNsZWFudXAoInN0dWR5IDIiLCAiY2hpbGRyZW4iKQpkMyA8LSBjbGVhbnVwKCJzdHVkeSAzIiwgImNoaWxkcmVuIikKZDQgPC0gY2xlYW51cCgic3R1ZHkgNCIsICJjaGlsZHJlbiIpCgojIHR3ZWFrIGJ5IGhhbmQKZDIgPC0gZDIgJT4lCiAgZmlsdGVyKCFpcy5uYShhZ2UpKSAlPiUKICBmaWx0ZXIoYWdlID49IDcsIGFnZSA8IDEwKSAlPiUKICBmaWx0ZXIoY2hhcmFjdGVyICE9ICJlbGVwaGFudCIpCgpkMyA8LSBkMyAlPiUKICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlciksIGNoYXJhY3RlciAhPSAiIikKCmQ0IDwtIGQ0ICU+JQogIGZpbHRlcighaXMubmEoY2hhcmFjdGVyKSwgY2hhcmFjdGVyICE9ICIiKQpgYGAKCmBgYHtyIGRhdGFmcmFtZXMgZm9yIGRpbWVuc2lvbiByZWR1Y2F0aW9ufQojIG1ha2UgZGF0YWZyYW1lcyBmb3IgczEKIyBkMV9iZWV0bGUgPC0gbWFrZURSREYoInN0dWR5IDEiLCAiYmVldGxlIikKIyBkMV9yb2JvdCA8LSBtYWtlRFJERigic3R1ZHkgMSIsICJyb2JvdCIpCmQxX2FsbCA8LSBtYWtlRFJERigic3R1ZHkgMSIsICJhbGwiKQoKIyBtYWtlIGRhdGFmcmFtZXMgZm9yIGZvbGxvdy11cCBzdHVkaWVzIHRvIHMxCmQxYl9hbGwgPC0gbWFrZURSREYoInN0dWR5IDFiIiwgImFsbCIpCmQxY19hbGwgPC0gbWFrZURSREYoInN0dWR5IDFjIiwgImFsbCIpCgojIG1ha2UgZGF0YWZyYW1lcyBmb3Igc3R1ZHkgMgojIGQyX2JlZXRsZSA8LSBtYWtlRFJERigic3R1ZHkgMiIsICJiZWV0bGUiKQojIGQyX3JvYm90IDwtIG1ha2VEUkRGKCJzdHVkeSAyIiwgInJvYm90IikKZDJfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSAyIiwgImFsbCIpCgojIG1ha2UgZGF0YWZyYW1lcyBmb3Igc3R1ZHkgMwojIGQzX2JlZXRsZSA8LSBtYWtlRFJERigic3R1ZHkgMyIsICJiZWV0bGUiKQojIGQzX3JvYm90IDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgInJvYm90IikKZDNfYWxsIDwtIG1ha2VEUkRGKCJzdHVkeSAzIiwgImFsbCIpCgojIG1ha2UgZGF0YWZyYW1lcyBmb3Igc3R1ZHkgNApkNF9hbGwgPC0gbWFrZURSREYoInN0dWR5IDQiLCAiYWxsIikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyBBbmFseXNpcyBwbGFuCgpGb3IgYWxsIHN0dWRpZXMgd2UgY29uZHVjdCBleHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzZXMgdXNpbmcgUGVhcnNvbiBjb3JyZWxhdGlvbnMgdG8gZmluZCBtaW5pbXVtIHJlc2lkdWFsIHNvbHV0aW9ucy4gCgpGb3IgZWFjaCBzdHVkeSwgd2UgZmlyc3QgZXhhbWluZSBtYXhpbWFsIHVucm90YXRlZCBhbmQgcm90YXRlZCBzb2x1dGlvbnMuIFRvIGRldGVybWluZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0LCB3ZSB1c2UgdGhlIGZvbGxvd2luZyBydWxlIG9mIHRodW1iOiBXaXRoICRwJCBvYnNlcnZhdGlvbnMgcGVyIHBhcnRpY2lwYW50LCB3ZSBjYW4gZXh0cmFjdCBhIG1heGltdW0gb2YgJGskIGZhY3RvcnMsIHdoZXJlICQocC1rKSoyID4gcCtrJCwgaS5lLiwgJGsgPCBwLzMkLiBUaHVzLCB3aXRoIDQwIG1lbnRhbCBjYXBhY2l0eSBpdGVtcywgd2UgY2FuIGV4dHJhY3QgYSBtYXhpbXVtIG9mIDEzIGZhY3RvcnMuCgpUbyBkZXRlcm1pbmUgaG93IG1hbnkgZmFjdG9ycyB0byByZXRhaW4sIHdlIHVzZSB0aGUgZm9sbG93aW5nIHByZXNldCByZXRlbnRpb24gY3JpdGVyaWEsIGNvbnNpZGVyaW5nIHRoZSB1bnJvdGF0ZWQgbWF4aW1hbCBzb2x1dGlvbiAodW5sZXNzIG90aGVyd2lzZSBub3RlZCk6CgogIC0gRWFjaCBmYWN0b3IgbXVzdCBoYXZlIGFuIGVpZ2VudmFsdWUgPjEuMC4KICAtIEVhY2ggZmFjdG9yIG11c3QgaW5kaXZpZHVhbGx5IGFjY291bnQgZm9yID41JSBvZiB0aGUgdG90YWwgdmFyaWFuY2UgaW4gdGhlIG1heGltYWwgbW9kZWwuCiAgLSBBZnRlciByb3RhdGlvbiwgZWFjaCBmYWN0b3IgbXVzdCBiZSB0aGUgZG9taW5hbnQgZmFjdG9yIChpLmUuLCB0aGUgZmFjdG9yIHdpdGggdGhlIGhpZ2hlc3QgZmFjdG9yIGxvYWRpbmcpIGZvciDiiaUxIG1lbnRhbCBjYXBhY2l0eSBpdGVtLgoKV2UgdGhlbiBleGFtaW5lIGFuZCBpbnRlcnByZXQgdmFyaW1heC1yb3RhdGVkIHNvbHV0aW9ucywgZXh0cmFjdGluZyBvbmx5IHRoZSBudW1iZXIgb2YgZmFjdG9ycyB0aGF0IG1lZXQgdGhlc2UgY3JpdGVyaWEuCgojIFN0dWR5IDEKClN0dWR5IGluZm9ybWF0aW9uOgoKKiBEZXNpZ246IDIgY29uZGl0aW9ucyAoYmVldGxlLCByb2JvdCksIDMtcG9pbnQgcmVzcG9uc2Ugc2NhbGUsICJkZWNpZGUgd2hhdCB0byBkbyIgYW5kICJoYXZlIGludGVudGlvbnMiCiogUG9wdWxhdGlvbjogYWR1bHRzCiogRGF0ZSBjb25kdWN0ZWQ6IDIwMTYtMDctMDYgKE1UdXJrKQoKIyMgRGVtb2dyYXBoaWNzCgpgYGB7ciBzMSBkZW1vZ3JhcGhpY3N9CiMgbWFrZSBkZW1vZ3JhcGhpY3MgdGFibGVzCmRlbW9TYW1wbGVTaXplKCJzdHVkeSAxIikKZGVtb0R1cmF0aW9uKCJzdHVkeSAxIikKZGVtb0FnZSgic3R1ZHkgMSIpCmRlbW9HZW5kZXIoInN0dWR5IDEiKQpkZW1vUmFjZSgic3R1ZHkgMSIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKIyMjIFN0ZXAgMTogUnVuIG1heGltYWwgRUZBICh3aXRob3V0IGFuZCB3aXRoIHJvdGF0aW9uKQoKYGBge3IgczEgYWxsIG5vIHJvdGF0aW9ufQojIGV4YW1pbmUgc2NyZWUgcGxvdApmYS5wYXJhbGxlbChkMV9hbGwpCgojIHJ1biBFRkEgd2l0aG91dCByb3RhdGlvbiB3aXRoIE4gZmFjdG9ycwplZmFfZDFfYWxsX3Vucm90YXRlZCA8LSBmYShkMV9hbGwsIDEzLCByb3RhdGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kMV9hbGxfdW5yb3RhdGVkKQoKIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2QxX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2QxX2FsbF91bnJvdGF0ZWQpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyBjb3VudCBmYWN0b3JzIHdpdGggZWlnZW52YWx1ZXMgPiAxIGFuZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JQplZmFfZDFfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDFfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kMV9hbGxfdW5yb3RhdGVkX25mYWN0b3JzCmBgYAoKYGBge3IgczEgYWxsIHJvdGF0aW9ufQplZmFfZDFfYWxsX3JvdGF0ZWRfbWF4IDwtIGZhKGQxX2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDFfYWxsX3JvdGF0ZWQgPC0gZmEoZDFfYWxsLCBlZmFfZDFfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kMV9hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kMV9hbGxfcm90YXRlZClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShsb2FkaW5nX2FicyA9IGFicyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGxvYWRpbmdfYWJzKSAlPiUKICB1bmdyb3VwKCkKZWZhX2QxX2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2QxX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2QxX2FsbCA8LSBlZmFfZDFfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2QxX2FsbApgYGAKCiMjIyBTdGVwIDI6IFJ1biBFRkEgd2l0aCB2YXJpbWF4IHJvdGF0aW9uCgpgYGB7ciBzMSBhbGwgdmFyaW1heCByb3RhdGlvbn0KIyBydW4gRUZBIHdpdGggcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QxX2FsbF9yb3RhdGVkTiA8LSBmYShkMV9hbGwsIG5mYWN0b3JzX2QxX2FsbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gY2hvc2VuUm90VHlwZSwgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QxX2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDFfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kMV9hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4odmFyID0gImNhcGFjaXR5IikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMjIyBGYWN0b3IgbG9hZGluZ3MgdGFibGUKCmBgYHtyIHMxIGxvYWRpbmdzIHRhYmxlfQpkYXRhLmZyYW1lKGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QxX2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCiMgU3R1ZHkgMgoKU3R1ZHkgaW5mb3JtYXRpb246CgoqIERlc2lnbjogMiBjb25kaXRpb25zIChiZWV0bGUsIHJvYm90KSwgMy1wb2ludCByZXNwb25zZSBzY2FsZSwgImRlY2lkZSB3aGF0IHRvIGRvIiBhbmQgImhhdmUgaW50ZW50aW9ucyIKKiBQb3B1bGF0aW9uOiA3LTl5byBjaGlsZHJlbgoqIERhdGUgY29uZHVjdGVkOiBKdW5lIC0gRGVjZW1iZXIgMjAxNgoKIyMgRGVtb2dyYXBoaWNzCgpgYGB7ciBzMiBkZW1vZ3JhcGhpY3N9CiMgbWFrZSBkZW1vZ3JhcGhpY3MgdGFibGVzCmRlbW9TYW1wbGVTaXplKCJzdHVkeSAyIikKIyBkZW1vRHVyYXRpb24oInN0dWR5IDIiKQpkZW1vQWdlKCJzdHVkeSAyIikKZGVtb0dlbmRlcigic3R1ZHkgMiIpCiMgZGVtb1JhY2UoInN0dWR5IDIiKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIyBFeHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMKCiMjIyBTdGVwIDE6IFJ1biBtYXhpbWFsIEVGQSAod2l0aG91dCBhbmQgd2l0aCByb3RhdGlvbikKCmBgYHtyIHMyIGFsbCBubyByb3RhdGlvbn0KIyBleGFtaW5lIHNjcmVlIHBsb3QKZmEucGFyYWxsZWwoZDJfYWxsKQoKIyBydW4gRUZBIHdpdGhvdXQgcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QyX2FsbF91bnJvdGF0ZWQgPC0gZmEoZDJfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDJfYWxsX3Vucm90YXRlZCkKCiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9kMl9hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9kMl9hbGxfdW5yb3RhdGVkKSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2QyX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMgPC0gZWZhX2QyX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfZDJfYWxsX3Vucm90YXRlZF9uZmFjdG9ycwpgYGAKCmBgYHtyIHMyIGFsbCByb3RhdGlvbn0KZWZhX2QyX2FsbF9yb3RhdGVkX21heCA8LSBmYShkMl9hbGwsIDEzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKZWZhX2QyX2FsbF9yb3RhdGVkIDwtIGZhKGQyX2FsbCwgZWZhX2QyX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgojIGNoZWNrIHRoYXQgZWFjaCBvZiB0aGVzZSBmYWN0b3JzIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGF0IGxlYXN0IG9uZSBtZW50YWwgY2FwYWNpdHkgaXRlbQplZmFfZDJfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgPC0gZmEuc29ydChsb2FkaW5ncyhlZmFfZDJfYWxsX3JvdGF0ZWQpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBtdXRhdGUobG9hZGluZ19hYnMgPSBhYnMobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nX2FicykgJT4lCiAgdW5ncm91cCgpCmVmYV9kMl9hbGxfcm90YXRlZF9sb2FkaW5ncwoKIyBkcm9wIGFueSBmYWN0b3JzIHdoZXJlIG4gPCAxCmVmYV9kMl9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKQoKIyBzZXQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdApuZmFjdG9yc19kMl9hbGwgPC0gZWZhX2QyX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApICU+JQogIG5yb3coKQpuZmFjdG9yc19kMl9hbGwKYGBgCgojIyMgU3RlcCAyOiBSdW4gRUZBIHdpdGggdmFyaW1heCByb3RhdGlvbgoKYGBge3IgczIgYWxsIHZhcmltYXggcm90YXRpb259CiMgcnVuIEVGQSB3aXRoIHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMl9hbGxfcm90YXRlZE4gPC0gZmEoZDJfYWxsLCBuZmFjdG9yc19kMl9hbGwsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kMl9hbGxfcm90YXRlZE4pCgojIGdldCBsb2FkaW5ncyBmb3IgZWFjaCBmYWN0b3IKZWZhX2QyX2FsbF9yb3RhdGVkTl9sb2FkaW5ncyA8LSBsb2FkaW5ncyhlZmFfZDJfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjYXBhY2l0eSIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIyMgRmFjdG9yIGxvYWRpbmdzIHRhYmxlCgpgYGB7ciBzMiBsb2FkaW5ncyB0YWJsZX0KZGF0YS5mcmFtZShsb2FkaW5ncyhmYS5zb3J0KGVmYV9kMl9hbGxfcm90YXRlZE4pKVtdKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk0iKSksIGZ1bnMocm91bmQyKSkKYGBgCgojIFN0dWR5IDMgCgpTdHVkeSBpbmZvcm1hdGlvbjoKCiogRGVzaWduOiA3IGNvbmRpdGlvbnMgKGJlZXRsZSwgcm9ib3QsIC4uLikgKyAyIGZvbGxvdy11cCBjb25kaXRpb25zLCAzLXBvaW50IHJlc3BvbnNlIHNjYWxlLCAiZGVjaWRlIHdoYXQgdG8gZG8iIGFuZCAiaGF2ZSBpbnRlbnRpb25zIgoqIFBvcHVsYXRpb246IDctOXlvIGNoaWxkcmVuCiogRGF0ZSBjb25kdWN0ZWQ6IEphbnVhcnkgLSBKdW5lIDIwMTcKCiMjIERlbW9ncmFwaGljcwoKYGBge3IgczMgZGVtb2dyYXBoaWNzfQojIG1ha2UgZGVtb2dyYXBoaWNzIHRhYmxlcwpkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgMyIpCiMgZGVtb0R1cmF0aW9uKCJzdHVkeSAzIikKIyBkZW1vQWdlKCJzdHVkeSAzIikKIyBkZW1vR2VuZGVyKCJzdHVkeSAzIikKIyBkZW1vUmFjZSgic3R1ZHkgMyIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIEV4cGxvcmF0b3J5IGZhY3RvciBhbmFseXNpcwoKIyMjIFN0ZXAgMTogUnVuIG1heGltYWwgRUZBICh3aXRob3V0IGFuZCB3aXRoIHJvdGF0aW9uKQoKYGBge3IgczMgYWxsIG5vIHJvdGF0aW9ufQojIGV4YW1pbmUgc2NyZWUgcGxvdApmYS5wYXJhbGxlbChkM19hbGwpCgojIHJ1biBFRkEgd2l0aG91dCByb3RhdGlvbiB3aXRoIE4gZmFjdG9ycwplZmFfZDNfYWxsX3Vucm90YXRlZCA8LSBmYShkM19hbGwsIDEzLCByb3RhdGUgPSAibm9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kM19hbGxfdW5yb3RhdGVkKQoKIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2QzX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2QzX2FsbF91bnJvdGF0ZWQpJFZhY2NvdW50ZWQgJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKQoKIyBjb3VudCBmYWN0b3JzIHdpdGggZWlnZW52YWx1ZXMgPiAxIGFuZCB2YXJpYW5jZSBleHBsYWluZWQgPiA1JQplZmFfZDNfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDNfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kM19hbGxfdW5yb3RhdGVkX25mYWN0b3JzCmBgYAoKYGBge3IgczMgYWxsIHJvdGF0aW9ufQplZmFfZDNfYWxsX3JvdGF0ZWRfbWF4IDwtIGZhKGQzX2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDNfYWxsX3JvdGF0ZWQgPC0gZmEoZDNfYWxsLCBlZmFfZDNfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kM19hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kM19hbGxfcm90YXRlZClbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShsb2FkaW5nX2FicyA9IGFicyhsb2FkaW5nKSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGxvYWRpbmdfYWJzKSAlPiUKICB1bmdyb3VwKCkKZWZhX2QzX2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2QzX2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2QzX2FsbCA8LSBlZmFfZDNfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2QzX2FsbApgYGAKCiMjIyBTdGVwIDI6IFJ1biBFRkEgd2l0aCB2YXJpbWF4IHJvdGF0aW9uCgpgYGB7ciBzMyBhbGwgdmFyaW1heCByb3RhdGlvbn0KIyBydW4gRUZBIHdpdGggcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2QzX2FsbF9yb3RhdGVkTiA8LSBmYShkM19hbGwsIG5mYWN0b3JzX2QzX2FsbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gY2hvc2VuUm90VHlwZSwgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QzX2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDNfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kM19hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4odmFyID0gImNhcGFjaXR5IikKYGBgCgo8cCBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+PGEgaHJlZj0iI2hlYWRlciI+YmFjayB0byBUT0M8L2E+PC9wPgoKIyMjIyBGYWN0b3IgbG9hZGluZ3MgdGFibGUKCmBgYHtyIHMzIGxvYWRpbmdzIHRhYmxlfQpkYXRhLmZyYW1lKGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QzX2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCiMjIyBTdWJzY2FsZXMKCiMjIyMgUmVsaWFiaWxpdHkgKGFuZCBpbnRlcmNvcnJlbGF0aW9ucyAtIHNlZSBhbHBoYSkKCmBgYHtyIHMzIHN1YnNjYWxlIHJlbGlhYmlsaXR5fQojIENyb25iYWNoJ3MgYWxwaGEgKHN1YnNjYWxlcykKa2V5cy5saXN0IDwtIGxpc3QoU09VTCA9IGMoInByaWRlIiwgImRlcHJlc3NlZCIsICJkaXNyZXNwZWN0ZWQiLCAiZ3VpbHQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgImVtYmFycmFzc2VkIiwgImhhcHB5IiwgImxvdmUiKSwKICAgICAgICAgICAgICAgICAgQk9EWSA9IGMoImh1bmdyeSIsICJvZG9ycyIsICJmZWFyIiwgInBhaW4iLCAidGlyZWQiLCAiYW5ncnkiLCAibmF1c2VhdGVkIiksCiAgICAgICAgICAgICAgICAgIE1JTkQgPSBjKCJyZWFzb25pbmciLCAiY2hvaWNlcyIsICJyZW1lbWJlcmluZyIsICJ0ZW1wZXJhdHVyZSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAiY29uc2Npb3VzIiwgImRlcHRoIikpIApzY29yZXMgPC0gc2NvcmVJdGVtcyhrZXlzLmxpc3QsIGQzX2FsbCwgbWluID0gMCwgbWF4ID0gMSkgICMgb3IganVzdCB1c2UgdGhlIGtleXMubGl0CiMgc3VtbWFyeShzY29yZXMpCnNjb3JlcwoKIyBvbWVnYQpvbWVnYShkM19hbGwsIHBsb3QgPSBGKQpgYGAKCiMgU3R1ZHkgNAoKU3R1ZHkgaW5mb3JtYXRpb246CgoqIERlc2lnbjogNyBjb25kaXRpb25zIChiZWV0bGUsIHJvYm90LCAuLi4pICsgMiBmb2xsb3ctdXAgY29uZGl0aW9ucyAoZG9sbCwgdGVkZHkgYmVhciksIDMtcG9pbnQgcmVzcG9uc2Ugc2NhbGUsICJkZWNpZGUgd2hhdCB0byBkbyIgYW5kICJoYXZlIGludGVudGlvbnMiCiogUG9wdWxhdGlvbjogNC02eW8gY2hpbGRyZW4KKiBEYXRlIGNvbmR1Y3RlZDogTWFyY2ggMjAxNyAtIHByZXNlbnQKCiMjIERlbW9ncmFwaGljcwoKYGBge3IgczQgZGVtb2dyYXBoaWNzfQojIG1ha2UgZGVtb2dyYXBoaWNzIHRhYmxlcwpkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgNCIpCiMgZGVtb0R1cmF0aW9uKCJzdHVkeSA0IikKZGVtb0FnZSgic3R1ZHkgNCIpCiMgZGVtb0dlbmRlcigic3R1ZHkgNCIpCiMgZGVtb1JhY2UoInN0dWR5IDQiKQpgYGAKCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij48YSBocmVmPSIjaGVhZGVyIj5iYWNrIHRvIFRPQzwvYT48L3A+CgojIyBFeHBsb3JhdG9yeSBmYWN0b3IgYW5hbHlzaXMKCiMjIyBTdGVwIDE6IFJ1biBtYXhpbWFsIEVGQSAod2l0aG91dCBhbmQgd2l0aCByb3RhdGlvbikKCmBgYHtyIHM0IGFsbCBubyByb3RhdGlvbn0KIyBleGFtaW5lIHNjcmVlIHBsb3QKZmEucGFyYWxsZWwoZDRfYWxsKQoKIyBydW4gRUZBIHdpdGhvdXQgcm90YXRpb24gd2l0aCBOIGZhY3RvcnMKZWZhX2Q0X2FsbF91bnJvdGF0ZWQgPC0gZmEoZDRfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDRfYWxsX3Vucm90YXRlZCkKCiMgZXhhbWluZSBlaWdlbnZhbHVlcyBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkCmVmYV9kNF9hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9kNF9hbGxfdW5yb3RhdGVkKSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2Q0X2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMgPC0gZWZhX2Q0X2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfZDRfYWxsX3Vucm90YXRlZF9uZmFjdG9ycwpgYGAKCmBgYHtyIHM0IGFsbCByb3RhdGlvbn0KZWZhX2Q0X2FsbF9yb3RhdGVkX21heCA8LSBmYShkNF9hbGwsIDEzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKZWZhX2Q0X2FsbF9yb3RhdGVkIDwtIGZhKGQ0X2FsbCwgZWZhX2Q0X2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgojIGNoZWNrIHRoYXQgZWFjaCBvZiB0aGVzZSBmYWN0b3JzIGlzIHRoZSBkb21pbmFudCBmYWN0b3IgZm9yIGF0IGxlYXN0IG9uZSBtZW50YWwgY2FwYWNpdHkgaXRlbQplZmFfZDRfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgPC0gZmEuc29ydChsb2FkaW5ncyhlZmFfZDRfYWxsX3JvdGF0ZWQpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBtdXRhdGUobG9hZGluZ19hYnMgPSBhYnMobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nX2FicykgJT4lCiAgdW5ncm91cCgpCmVmYV9kNF9hbGxfcm90YXRlZF9sb2FkaW5ncwoKIyBkcm9wIGFueSBmYWN0b3JzIHdoZXJlIG4gPCAxCmVmYV9kNF9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKQoKIyBzZXQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdApuZmFjdG9yc19kNF9hbGwgPC0gZWZhX2Q0X2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApICU+JQogIG5yb3coKQpuZmFjdG9yc19kNF9hbGwKYGBgCgojIyMgU3RlcCAyOiBSdW4gRUZBIHdpdGggdmFyaW1heCByb3RhdGlvbgoKYGBge3IgczQgYWxsIHZhcmltYXggcm90YXRpb259CiMgcnVuIEVGQSB3aXRoIHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kNF9hbGxfcm90YXRlZE4gPC0gZmEoZDRfYWxsLCBuZmFjdG9yc19kNF9hbGwsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCnByaW50KGVmYV9kNF9hbGxfcm90YXRlZE4pCgojIGdldCBsb2FkaW5ncyBmb3IgZWFjaCBmYWN0b3IKZWZhX2Q0X2FsbF9yb3RhdGVkTl9sb2FkaW5ncyA8LSBsb2FkaW5ncyhlZmFfZDRfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjYXBhY2l0eSIpCmBgYAoKPHAgc3R5bGU9InRleHQtYWxpZ246cmlnaHQiPjxhIGhyZWY9IiNoZWFkZXIiPmJhY2sgdG8gVE9DPC9hPjwvcD4KCiMjIyMgRmFjdG9yIGxvYWRpbmdzIHRhYmxlCgpgYGB7ciBzNCBsb2FkaW5ncyB0YWJsZX0KZGF0YS5mcmFtZShsb2FkaW5ncyhmYS5zb3J0KGVmYV9kNF9hbGxfcm90YXRlZE4pKVtdKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoIk0iKSksIGZ1bnMocm91bmQyKSkKYGBgCgojIEJpZyBmYWN0b3IgbG9hZGluZ3MgdGFibGUgZm9yIGFsbCBzdHVkaWVzIChTdHVkaWVzIDEtNCkKCmBgYHtyIGFsbCBzdHVkaWVzIGxvYWRpbmdzIHRhYmxlfQojIG1hbnVhbGx5IHNldCAzIGZhY3RvcnMKb3JkZXJfczFfbWFudWFsIDwtIGxvYWRpbmdzKGZhLnNvcnQoZmEoZDFfYWxsLCBuZmFjdG9ycyA9IDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUpKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjYXBhY2l0eSIpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAib3JkZXIxX21hbnVhbCIpICU+JQogIHJlbmFtZShzMV9oZWFydCA9IE1SMiwgczFfYm9keSA9IE1SMSwgczFfbWluZCA9IE1SMykKCm9yZGVyX3MxIDwtIGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QxX2FsbF9yb3RhdGVkTikpW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiY2FwYWNpdHkiKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm9yZGVyMSIpICU+JQogIHJlbmFtZShzMV9oZWFydCA9IE1SMiwgczFfYm9keSA9IE1SMSwgczFfbWluZCA9IE1SMykKCm9yZGVyX3MyIDwtIGxvYWRpbmdzKGZhLnNvcnQoZWZhX2QyX2FsbF9yb3RhdGVkTikpW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiY2FwYWNpdHkiKSAlPiUKICByZW5hbWUoczJfYm9keSA9IE1SMiwgczJfaGVhcnQgPSBNUjEsIHMyX21pbmQgPSBNUjMpCgpvcmRlcl9zMyA8LSBsb2FkaW5ncyhmYS5zb3J0KGVmYV9kM19hbGxfcm90YXRlZE4pKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gImNhcGFjaXR5IikgJT4lCiAgcmVuYW1lKHMzX2JvZHkgPSBNUjEsIHMzX2hlYXJ0ID0gTVIyLCBzM19taW5kID0gTVIzKQoKb3JkZXJfczQgPC0gbG9hZGluZ3MoZmEuc29ydChlZmFfZDRfYWxsX3JvdGF0ZWROKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjYXBhY2l0eSIpICU+JQogIHJlbmFtZShzNF9ib2R5ID0gTVIxLCAKICAgICAgICAgIyBzNF9oZWFydCA9IE1SMywgCiAgICAgICAgIHM0X21pbmQgPSBNUjIpCgojIG1hbnVhbGx5IHNldCAzIGZhY3RvcnMKb3JkZXJfczRfbWFudWFsIDwtIGxvYWRpbmdzKGZhLnNvcnQoZmEoZDFfYWxsLCBuZmFjdG9ycyA9IDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUpKSlbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjYXBhY2l0eSIpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAib3JkZXIxX21hbnVhbCIpICU+JQogIHJlbmFtZShzNF9oZWFydCA9IE1SMiwgczRfYm9keSA9IE1SMSwgczRfbWluZCA9IE1SMykKCmJpZ1RhYmxlIDwtIG9yZGVyX3MxX21hbnVhbCAlPiUgIyBjb3VsZCBzdWJzdGl0dXRlIG9yZGVyX3MxCiAgZnVsbF9qb2luKG9yZGVyX3MyKSAlPiUKICBmdWxsX2pvaW4ob3JkZXJfczMpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zNF9tYW51YWwpICU+JSAjIGNvdWxkIHN1YnN0aXR1dGUgb3JkZXJfczQKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgicyIpKSwgZnVucyhyb3VuZDIpKSAlPiUKICBzZWxlY3Qob3JkZXIxX21hbnVhbCwgIyBjb3VsZCBzdWJpc3RpdHV0ZSBvcmRlcl9zMQogICAgICAgICBjYXBhY2l0eSwgZW5kc193aXRoKCJoZWFydCIpLCBlbmRzX3dpdGgoImJvZHkiKSwgZW5kc193aXRoKCJtaW5kIikpIAoKYmlnVGFibGUKYGBgCgojIEZpZ3VyZXMKCmBgYHtyIHBsb3R0aW5nIHNldHVwIGNoYXJhY3RlciBtZWFucywgaW5jbHVkZSA9IEZ9CiMgYm9vdHN0cmFwIDk1JSBDSXMgZm9yIHJhdGluZ3MgYnkgY2hhcmFjdGVyIChub25wYXJhbWV0cmljKQojIHN0dWR5IDEKY2hhcl9wbG90dGluZ19yYXRpbmdzX3MxIDwtIGQxICU+JSAKICBzZWxlY3Qoc3ViaWQsIGNoYXJhY3RlciwgY2FwYWNpdHksIHJlc3BvbnNlTnVtKSAlPiUKICBtdWx0aV9ib290KGNvbHVtbiA9ICJyZXNwb25zZU51bSIsCiAgICAgICAgICAgICBzdW1tYXJ5X2Z1bmN0aW9uID0gIm1lYW5fbmEiLAogICAgICAgICAgICAgc3VtbWFyeV9ncm91cHMgPSBjKCJjaGFyYWN0ZXIiLCAiY2FwYWNpdHkiKSwKICAgICAgICAgICAgIHN0YXRpc3RpY3NfZnVuY3Rpb25zID0gYygiY2lfbG93ZXJfbmEiLCAibWVhbl9uYSIsICJjaV91cHBlcl9uYSIpKSAlPiUKICBmdWxsX2pvaW4oZGVtb1NhbXBsZVNpemUoInN0dWR5IDEiKSAlPiUgZmlsdGVyKGNoYXJhY3RlciAhPSAiYWxsIikpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSAxIikKCiMgc3R1ZHkgMgpjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfczIgPC0gZDIgJT4lIAogIHNlbGVjdChzdWJpZCwgY2hhcmFjdGVyLCBjYXBhY2l0eSwgcmVzcG9uc2VOdW0pICU+JQogIG11bHRpX2Jvb3QoY29sdW1uID0gInJlc3BvbnNlTnVtIiwKICAgICAgICAgICAgIHN1bW1hcnlfZnVuY3Rpb24gPSAibWVhbl9uYSIsCiAgICAgICAgICAgICBzdW1tYXJ5X2dyb3VwcyA9IGMoImNoYXJhY3RlciIsICJjYXBhY2l0eSIpLAogICAgICAgICAgICAgc3RhdGlzdGljc19mdW5jdGlvbnMgPSBjKCJjaV9sb3dlcl9uYSIsICJtZWFuX25hIiwgImNpX3VwcGVyX25hIikpICU+JQogIGZ1bGxfam9pbihkZW1vU2FtcGxlU2l6ZSgic3R1ZHkgMiIpICU+JSBmaWx0ZXIoY2hhcmFjdGVyICE9ICJhbGwiKSkgJT4lCiAgbXV0YXRlKHN0dWR5ID0gInN0dWR5IDIiKQoKIyBzdHVkeSAzCmNoYXJfcGxvdHRpbmdfcmF0aW5nc19zMyA8LSBkMyAlPiUgCiAgc2VsZWN0KHN1YmlkLCBjaGFyYWN0ZXIsIGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgbXVsdGlfYm9vdChjb2x1bW4gPSAicmVzcG9uc2VOdW0iLAogICAgICAgICAgICAgc3VtbWFyeV9mdW5jdGlvbiA9ICJtZWFuX25hIiwKICAgICAgICAgICAgIHN1bW1hcnlfZ3JvdXBzID0gYygiY2hhcmFjdGVyIiwgImNhcGFjaXR5IiksCiAgICAgICAgICAgICBzdGF0aXN0aWNzX2Z1bmN0aW9ucyA9IGMoImNpX2xvd2VyX25hIiwgIm1lYW5fbmEiLCAiY2lfdXBwZXJfbmEiKSkgJT4lCiAgZnVsbF9qb2luKGRlbW9TYW1wbGVTaXplKCJzdHVkeSAzIikgJT4lIGZpbHRlcihjaGFyYWN0ZXIgIT0gImFsbCIpKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSAic3R1ZHkgMyIpCgojIHN0dWR5IDQKY2hhcl9wbG90dGluZ19yYXRpbmdzX3M0IDwtIGQ0ICU+JSAKICBzZWxlY3Qoc3ViaWQsIGNoYXJhY3RlciwgY2FwYWNpdHksIHJlc3BvbnNlTnVtKSAlPiUKICBtdWx0aV9ib290KGNvbHVtbiA9ICJyZXNwb25zZU51bSIsCiAgICAgICAgICAgICBzdW1tYXJ5X2Z1bmN0aW9uID0gIm1lYW5fbmEiLAogICAgICAgICAgICAgc3VtbWFyeV9ncm91cHMgPSBjKCJjaGFyYWN0ZXIiLCAiY2FwYWNpdHkiKSwKICAgICAgICAgICAgIHN0YXRpc3RpY3NfZnVuY3Rpb25zID0gYygiY2lfbG93ZXJfbmEiLCAibWVhbl9uYSIsICJjaV91cHBlcl9uYSIpKSAlPiUKICBmdWxsX2pvaW4oZGVtb1NhbXBsZVNpemUoInN0dWR5IDQiKSAlPiUgZmlsdGVyKGNoYXJhY3RlciAhPSAiYWxsIikpICU+JQogIG11dGF0ZShzdHVkeSA9ICJzdHVkeSA0IikKYGBgCgpgYGB7ciBwbG90dGluZyBzZXR1cCBjaGFyYWN0ZXIgbWVhbnMgbWVyZ2UsIGluY2x1ZGUgPSBGfQpjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfYWxsIDwtIGNoYXJfcGxvdHRpbmdfcmF0aW5nc19zMSAlPiUKICBmdWxsX2pvaW4oY2hhcl9wbG90dGluZ19yYXRpbmdzX3MyKSAlPiUKICBmdWxsX2pvaW4oY2hhcl9wbG90dGluZ19yYXRpbmdzX3MzKSAlPiUKICBmdWxsX2pvaW4oY2hhcl9wbG90dGluZ19yYXRpbmdzX3M0KSAlPiUKICBmaWx0ZXIoIWlzLm5hKGNoYXJhY3RlcikpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoc3R1ZHkgPSBmYWN0b3Ioc3R1ZHkpLAogICAgICAgICBjb25kaXRpb24gPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY29tcHV0ZXIiLCAiZG9sbCIsICJ0ZWRkeV9iZWFyIiwgInJvYm90IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWV0bGUiLCAiYmlyZCIsICJtb3VzZSIsICJnb2F0IiwgImVsZXBoYW50IikpKQpgYGAKCmBgYHtyIHBsb3R0aW5nIHNldHVwIGNhcGFjaXR5IHdvcmRpbmdzLCBpbmNsdWRlID0gRn0KY2hhcl9wbG90dGluZ193b3JkaW5ncyA8LSBjaGFyX3Bsb3R0aW5nX3JhdGluZ3NfYWxsICU+JQogIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoY2FwYWNpdHkpICU+JQogIGRpc3RpbmN0KCkgJT4lIAogIG11dGF0ZSh3b3JkaW5nID0gZmFjdG9yKAogICAgcmVjb2RlKGNhcGFjaXR5LAogICAgICAgICAgIGhhcHB5ID0gImZlZWwgaGFwcHkiLAogICAgICAgICAgIGRlcHJlc3NlZCA9ICJmZWVsIHNhZCIsCiAgICAgICAgICAgZmVhciA9ICJmZWVsIHNjYXJlZCIsCiAgICAgICAgICAgYW5ncnkgPSAiZ2V0IGFuZ3J5IiwKICAgICAgICAgICBjYWxtID0gImZlZWwgY2FsbSIsCiAgICAgICAgICAgc291bmRzID0gImhlYXIgc291bmRzIiwKICAgICAgICAgICBzZWVpbmcgPSAic2VlIHRoaW5ncyIsCiAgICAgICAgICAgdGVtcGVyYXR1cmUgPSAic2Vuc2UgdGVtcGVyYXR1cmVzIiwKICAgICAgICAgICBvZG9ycyA9ICJzbWVsbCB0aGluZ3MiLAogICAgICAgICAgIGRlcHRoID0gInNlbnNlLi4uIGNsb3NlIGJ5IG9yIGZhciBhd2F5IiwKICAgICAgICAgICBjb21wdXRhdGlvbnMgPSAiZG8gbWF0aCIsCiAgICAgICAgICAgdGhvdWdodHMgPSAiaGF2ZSB0aG91Z2h0cyIsCiAgICAgICAgICAgcmVhc29uaW5nID0gImZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaW5ncyIsCiAgICAgICAgICAgcmVtZW1iZXJpbmcgPSAicmVtZW1iZXIgdGhpbmdzIiwKICAgICAgICAgICBiZWxpZWZzID0gImhhdmUgYmVsaWVmcy4uLiIsCiAgICAgICAgICAgaHVuZ3J5ID0gImdldCBodW5ncnkiLAogICAgICAgICAgIHRpcmVkID0gImZlZWwgdGlyZWQiLAogICAgICAgICAgIHBhaW4gPSAiZmVlbCBwYWluIiwKICAgICAgICAgICBuYXVzZWF0ZWQgPSAiZmVlbCBzaWNrLi4uIiwKICAgICAgICAgICBzYWZlID0gImZlZWwgc2FmZSIsCiAgICAgICAgICAgbG92ZSA9ICJmZWVsIGxvdmUiLAogICAgICAgICAgIHJlY29nbml6aW5nID0gInJlY29nbml6ZSBzb21lYm9keSBlbHNlIiwKICAgICAgICAgICBjb21tdW5pY2F0aW5nID0gImNvbW11bmljYXRlIHdpdGggc29tZWJvZHkgZWxzZSIsCiAgICAgICAgICAgZ3VpbHQgPSAiZmVlbCBndWlsdHkiLAogICAgICAgICAgIGRpc3Jlc3BlY3RlZCA9ICJnZXQgaHVydCBmZWVsaW5ncyIsCiAgICAgICAgICAgZnJlZV93aWxsID0gImRlY2lkZSB3aGF0IHRvIGRvIiwKICAgICAgICAgICBjaG9pY2VzID0gIm1ha2UgY2hvaWNlcyIsCiAgICAgICAgICAgc2VsZl9yZXN0cmFpbnQgPSAiaGF2ZSBzZWxmLWNvbnRyb2wuLi4iLAogICAgICAgICAgIGludGVudGlvbnMgPSAibWFrZSBwbGFucyIsCiAgICAgICAgICAgZ29hbCA9ICJoYXZlIGdvYWxzLi4uIiwKICAgICAgICAgICBjb25zY2lvdXMgPSAiYmUgYXdhcmUgb2YgdGhpbmdzIiwKICAgICAgICAgICBzZWxmX2F3YXJlID0gImJlIGF3YXJlIG9mIGl0c2VsZiIsCiAgICAgICAgICAgZGVzaXJlcyA9ICJoYXZlIGRlc2lyZXMuLi4iLAogICAgICAgICAgIGVtYmFycmFzc2VkID0gImZlZWwgZW1iYXJyYXNzZWQiLAogICAgICAgICAgIGVtb19yZWNvZyA9ICJ1bmRlcnN0YW5kIGhvdyBzb21lYm9keSBlbHNlIGlzIGZlZWxpbmciLAogICAgICAgICAgIGpveSA9ICJmZWVsIGpveSIsCiAgICAgICAgICAgbW9yYWxpdHkgPSAia25vdyB3aGF0J3MgbmljZSBhbmQgd2hhdCdzIG1lYW4iLAogICAgICAgICAgIHBlcnNvbmFsaXR5ID0gImhhdmUgYSBwZXJzb25hbGl0eS4uLiIsCiAgICAgICAgICAgcGxlYXN1cmUgPSAiZmVlbCBwbGVhc3VyZS4uLiIsCiAgICAgICAgICAgcHJvdWQgPSAiZmVlbCBwcm91ZCIpKSkKYGBgCgpgYGB7ciBwbG90dGluZyBzZXR1cCBsb2FkaW5ncywgaW5jbHVkZSA9IEZ9CiMgbWVyZ2Ugd2l0aCBsb2FkaW5ncywgb3JkZXJpbmdzLCBhbmQgZG9taW5hbnQgZmFjdG9ycyBmcm9tIGVhY2ggc3R1ZHkgCmNoYXJfcGxvdHRpbmcgPC0gY2hhcl9wbG90dGluZ19yYXRpbmdzX2FsbCAlPiUKICBmdWxsX2pvaW4oY2hhcl9wbG90dGluZ193b3JkaW5ncykgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3MxICU+JQogICAgICAgICAgICAgIHJlbmFtZShzMV9NUjEgPSBzMV9ib2R5LCBzMV9NUjIgPSBzMV9oZWFydCwgczFfTVIzID0gczFfbWluZCkgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKHMxX01SMV9hYnMgPSBhYnMoczFfTVIxKSwKICAgICAgICAgICAgICAgICAgICAgczFfTVIyX2FicyA9IGFicyhzMV9NUjIpLAogICAgICAgICAgICAgICAgICAgICBzMV9NUjNfYWJzID0gYWJzKHMxX01SMyksCiAgICAgICAgICAgICAgICAgICAgIHMxX2ZhY3RvciA9IAogICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzMV9NUjFfYWJzID4gczFfTVIyX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczFfTVIxX2FicyA+IHMxX01SM19hYnMsICJCT0RZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMxX01SMl9hYnMgPiBzMV9NUjFfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczFfTVIyX2FicyA+IHMxX01SM19hYnMsICJIRUFSVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczFfTVIzX2FicyA+IHMxX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczFfTVIzX2FicyA+IHMxX01SMl9hYnMsICJNSU5EIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSwKICAgICAgICAgICAgICAgICAgICAgczFfY29sb3IgPSByZWNvZGUoczFfZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQk9EWSIgPSAiI0U0MUExQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIRUFSVCIgPSAiIzM3N0VCOCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNSU5EIiA9ICIjNERBRjRBIiksCiAgICAgICAgICAgICAgICAgICAgIHMxX29yZGVyID0gYXMubnVtZXJpYyhvcmRlcjEpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXMxX01SMV9hYnMsIC1zMV9NUjJfYWJzLCAtczFfTVIzX2FicykpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMiAlPiUKICAgICAgICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKHMyX01SMSA9IHMyX2hlYXJ0LCBzMl9NUjIgPSBzMl9ib2R5LCBzMl9NUjMgPSBzMl9taW5kKSAlPiUKICAgICAgICAgICAgICBtdXRhdGUoczJfTVIxX2FicyA9IGFicyhzMl9NUjEpLAogICAgICAgICAgICAgICAgICAgICBzMl9NUjJfYWJzID0gYWJzKHMyX01SMiksCiAgICAgICAgICAgICAgICAgICAgIHMyX01SM19hYnMgPSBhYnMoczJfTVIzKSwKICAgICAgICAgICAgICAgICAgICAgczJfZmFjdG9yID0gCiAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMyX01SMV9hYnMgPiBzMl9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjFfYWJzID4gczJfTVIzX2FicywgIkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczJfTVIyX2FicyA+IHMyX01SMV9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjJfYWJzID4gczJfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzMl9NUjNfYWJzID4gczJfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMl9NUjNfYWJzID4gczJfTVIyX2FicywgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzMl9jb2xvciA9IHJlY29kZShzMl9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjRTQxQTFDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiM0REFGNEEiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzMl9vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzMl9vcmRlciA9IGFzLm51bWVyaWMoczJfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXMyX01SMV9hYnMsIC1zMl9NUjJfYWJzLCAtczJfTVIzX2FicykpICU+JQogIGZ1bGxfam9pbihvcmRlcl9zMyAlPiUKICAgICAgICAgICAgICByZW5hbWUoczNfTVIxID0gczNfaGVhcnQsIHMzX01SMiA9IHMzX2JvZHksIHMzX01SMyA9IHMzX21pbmQpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzM19NUjFfYWJzID0gYWJzKHMzX01SMSksCiAgICAgICAgICAgICAgICAgICAgIHMzX01SMl9hYnMgPSBhYnMoczNfTVIyKSwKICAgICAgICAgICAgICAgICAgICAgczNfTVIzX2FicyA9IGFicyhzM19NUjMpLAogICAgICAgICAgICAgICAgICAgICBzM19mYWN0b3IgPSAKICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoczNfTVIxX2FicyA+IHMzX01SMl9hYnMgJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzX01SMV9hYnMgPiBzM19NUjNfYWJzLCAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzM19NUjJfYWJzID4gczNfTVIxX2FicyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzX01SMl9hYnMgPiBzM19NUjNfYWJzLCAiSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHMzX01SM19hYnMgPiBzM19NUjFfYWJzICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMzX01SM19hYnMgPiBzM19NUjJfYWJzLCAiTUlORCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICAgICAgICAgICAgICAgICAgIHMzX2NvbG9yID0gcmVjb2RlKHMzX2ZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFkiID0gIiNFNDFBMUMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEVBUlQiID0gIiMzNzdFQjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORCIgPSAiIzREQUY0QSIpKSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4odmFyID0gInMzX29yZGVyIikgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKHMzX29yZGVyID0gYXMubnVtZXJpYyhzM19vcmRlcikpICU+JQogICAgICAgICAgICAgIHNlbGVjdCgtczNfTVIxX2FicywgLXMzX01SMl9hYnMsIC1zM19NUjNfYWJzKSkgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3M0ICU+JQogICAgICAgICAgICAgIHJlbmFtZShzNF9NUjEgPSBzNF9ib2R5LCBzNF9NUjIgPSBzNF9taW5kKSAlPiUgIywgczRfTVIzID0gczRfaGVhcnQpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzNF9NUjFfYWJzID0gYWJzKHM0X01SMSksCiAgICAgICAgICAgICAgICAgICAgIHM0X01SMl9hYnMgPSBhYnMoczRfTVIyKSwKICAgICAgICAgICAgICAgICAgICAgIyBzNF9NUjNfYWJzID0gYWJzKHM0X01SMyksCiAgICAgICAgICAgICAgICAgICAgIHM0X2ZhY3RvciA9IAogICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShzNF9NUjFfYWJzID4gczRfTVIyX2FicywgIkJPRFkiLCAiTUlORCIpLAogICAgICAgICAgICAgICAgICAgICAjIHM0X2ZhY3RvciA9IAogICAgICAgICAgICAgICAgICAgICAjICAgaWZlbHNlKHM0X01SMV9hYnMgPiBzNF9NUjJfYWJzICYKICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgIHM0X01SMV9hYnMgPiBzNF9NUjNfYWJzLCAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgaWZlbHNlKHM0X01SMl9hYnMgPiBzNF9NUjFfYWJzICYKICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICBzNF9NUjJfYWJzID4gczRfTVIzX2FicywgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgaWZlbHNlKHM0X01SM19hYnMgPiBzNF9NUjFfYWJzICYKICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgczRfTVIzX2FicyA+IHM0X01SMl9hYnMsICJNSU5EIiwKICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgICAgICAgICAgICAgICAgICBzNF9jb2xvciA9IHJlY29kZShzNF9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCT0RZIiA9ICIjRTQxQTFDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhFQVJUIiA9ICIjMzc3RUI4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQiID0gIiM0REFGNEEiKSkgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJzNF9vcmRlciIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzNF9vcmRlciA9IGFzLm51bWVyaWMoczRfb3JkZXIpKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QoLXM0X01SMV9hYnMsIC1zNF9NUjJfYWJzKSkgIywgLXM0X01SM19hYnMpKQoKIyBjb25maWd1cmUgcGxvdCBsYWJlbHMKbGFiZWxfZGZfczEgPC0gY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSAxIikgJT4lIHNlbGVjdChjb25kaXRpb24sIG4pICU+JSB1bmlxdWUoKQpsYWJlbF9kZl9zMiA8LSBjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDIiKSAlPiUgc2VsZWN0KGNvbmRpdGlvbiwgbikgJT4lIHVuaXF1ZSgpCmxhYmVsX2RmX3MzIDwtIGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgMyIpICU+JSBzZWxlY3QoY29uZGl0aW9uLCBuKSAlPiUgdW5pcXVlKCkKbGFiZWxfZGZfczQgPC0gY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSA0IikgJT4lIHNlbGVjdChjb25kaXRpb24sIG4pICU+JSB1bmlxdWUoKQoKZmFjZXRMYWJzX3MxIDwtIGdzdWIoIiBcXCgiLCAiXG4oIiwgbWFrZUZhY2V0TGFicyhjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDEiKSkpCmZhY2V0TGFic19zMiA8LSBnc3ViKCIgXFwoIiwgIlxuKCIsIG1ha2VGYWNldExhYnMoY2hhcl9wbG90dGluZyAlPiUgZmlsdGVyKHN0dWR5ID09ICJzdHVkeSAyIikpKQpmYWNldExhYnNfczMgPC0gZ3N1YigiIFxcKCIsICJcbigiLCBtYWtlRmFjZXRMYWJzKGNoYXJfcGxvdHRpbmcgJT4lIGZpbHRlcihzdHVkeSA9PSAic3R1ZHkgMyIpKSkKZmFjZXRMYWJzX3M0IDwtIGdzdWIoIiBcXCgiLCAiXG4oIiwgbWFrZUZhY2V0TGFicyhjaGFyX3Bsb3R0aW5nICU+JSBmaWx0ZXIoc3R1ZHkgPT0gInN0dWR5IDQiKSkpCgojIGNvbmZpZ3VyZSBjdXN0b20gcGFsZXR0ZQpteVBhbGV0dGUgPC0gYnJld2VyLnBhbCgzLCAiU2V0MSIpOyBuYW1lcyhteVBhbGV0dGUpIDwtIGMoIkhFQVJUIiwgIkJPRFkiLCAiTUlORCIpCgpwYWxldHRlX2Jhc2UgPC0gY2hhcl9wbG90dGluZyAlPiUgCiAgc2VsZWN0KGNhcGFjaXR5LCBlbmRzX3dpdGgoIl9mYWN0b3IiKSkgJT4lCiAgZGlzdGluY3QoKQojIGFkanVzdCBieSBoYW5kIGRlcGVuZGluZyBvbiBvcmRlciBvZiBmYWN0b3JzISEKcGFsZXR0ZV9zMSA8LSBjKHJlcChteVBhbGV0dGVbIk1JTkQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczFfZmFjdG9yID09ICJNSU5EIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiSEVBUlQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczFfZmFjdG9yID09ICJIRUFSVCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkJPRFkiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczFfZmFjdG9yID09ICJCT0RZIikgJT4lIGNvdW50KCkpKQpwYWxldHRlX3MyIDwtIGMocmVwKG15UGFsZXR0ZVsiTUlORCJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzMl9mYWN0b3IgPT0gIk1JTkQiKSAlPiUgY291bnQoKSksCiAgICAgICAgICAgICAgICByZXAobXlQYWxldHRlWyJCT0RZIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMyX2ZhY3RvciA9PSAiQk9EWSIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkhFQVJUIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMyX2ZhY3RvciA9PSAiSEVBUlQiKSAlPiUgY291bnQoKSkpCnBhbGV0dGVfczMgPC0gYyhyZXAobXlQYWxldHRlWyJNSU5EIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHMzX2ZhY3RvciA9PSAiTUlORCIpICU+JSBjb3VudCgpKSwKICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkJPRFkiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczNfZmFjdG9yID09ICJCT0RZIikgJT4lIGNvdW50KCkpLAogICAgICAgICAgICAgICAgcmVwKG15UGFsZXR0ZVsiSEVBUlQiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczNfZmFjdG9yID09ICJIRUFSVCIpICU+JSBjb3VudCgpKSkKIyBwYWxldHRlX3M0IDwtIGMocmVwKG15UGFsZXR0ZVsiTUlORCJdLCBwYWxldHRlX2Jhc2UgJT4lIGZpbHRlcihzNF9mYWN0b3IgPT0gIk1JTkQiKSAlPiUgY291bnQoKSksCiMgICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkhFQVJUIl0sIHBhbGV0dGVfYmFzZSAlPiUgZmlsdGVyKHM0X2ZhY3RvciA9PSAiSEVBUlQiKSAlPiUgY291bnQoKSksCiMgICAgICAgICAgICAgICAgIHJlcChteVBhbGV0dGVbIkJPRFkiXSwgcGFsZXR0ZV9iYXNlICU+JSBmaWx0ZXIoczRfZmFjdG9yID09ICJCT0RZIikgJT4lIGNvdW50KCkpKQpgYGAKCiMjIDNEIHNjYXR0ZXJwbG90cwoKRmFjdG9yIGxvYWRpbmdzIGZvciB0aGUgNDAgbWVudGFsIGNhcGFjaXRpZXMgb24gdGhlIHRocmVlIHJvdGF0ZWQgZmFjdG9ycyBpbiBTdHVkeSAxLiBJdGVtcyBhcmUgY29sb3JlZCBieSB0aGVpciBkb21pbmFudCBmYWN0b3IgbG9hZGluZzogSXRlbXMgdGhhdCBsb2FkZWQgbW9zdCBzdHJvbmdseSBvbiB0aGUgYm9keSBmYWN0b3IgKGJvZGlseSBzdGF0ZXMgYW5kIHdpbGwpIGFyZSBpbiByZWQ7IGl0ZW1zIHRoYXQgbG9hZGVkIG1vc3Qgc3Ryb25nbHkgb24gdGhlIGhlYXJ0IGZhY3RvciAoc29jaWFsLWVtb3Rpb25hbCBleHBlcmllbmNlcyBhbmQgbW9yYWxpdHkpIGFyZSBpbiBibHVlOyBhbmQgaXRlbXMgdGhhdCBsb2FkZWQgbW9zdCBzdHJvbmdseSBvbiB0aGUgbWluZCBmYWN0b3IgKHBlcmNlcHR1YWwtY29nbml0aXZlIGFiaWxpdGllcyBhbmQgZ29hbCBwdXJzdWl0KSBhcmUgaW4gZ3JlZW4uCgojIyMgU3R1ZHkgMSAoYWR1bHRzKQoKYGBge3IgZmlndXJlIDNkIHNjYXR0ZXIgczF9CiMgc2V0IHVwIGxhYmVscyBmb3IgcGxvdCAoc2hvcnRlbmVkIHZlcnNpb24gb2YgbWVudGFsIGNhcGFjaXR5IGl0ZW1zKQp3b3JkaW5nX3MxIDwtIGxvYWRpbmdzKGVmYV9kMV9hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiaXRlbSIpICU+JQogIHNlbGVjdChpdGVtKSAlPiUKICBtdXRhdGUod29yZGluZyA9IGZhY3RvcigKICAgIHJlY29kZShpdGVtLAogICAgICAgICAgIGhhcHB5ID0gImZlZWwgaGFwcHkiLAogICAgICAgICAgIGRlcHJlc3NlZCA9ICJmZWVsIHNhZCIsCiAgICAgICAgICAgZmVhciA9ICJmZWVsIHNjYXJlZCIsCiAgICAgICAgICAgYW5ncnkgPSAiZ2V0IGFuZ3J5IiwKICAgICAgICAgICBjYWxtID0gImZlZWwgY2FsbSIsCiAgICAgICAgICAgc291bmRzID0gImhlYXIgc291bmRzIiwKICAgICAgICAgICBzZWVpbmcgPSAic2VlIHRoaW5ncyIsCiAgICAgICAgICAgdGVtcGVyYXR1cmUgPSAic2Vuc2UgdGVtcGVyYXR1cmVzIiwKICAgICAgICAgICBvZG9ycyA9ICJzbWVsbCB0aGluZ3MiLAogICAgICAgICAgIGRlcHRoID0gInNlbnNlIHdoZXRoZXIgc29tZXRoaW5nIGlzIGNsb3NlIGJ5IG9yIGZhciBhd2F5IiwKICAgICAgICAgICBjb21wdXRhdGlvbnMgPSAiZG8gbWF0aCIsCiAgICAgICAgICAgdGhvdWdodHMgPSAiaGF2ZSB0aG91Z2h0cyIsCiAgICAgICAgICAgcmVhc29uaW5nID0gImZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaW5ncyIsCiAgICAgICAgICAgcmVtZW1iZXJpbmcgPSAicmVtZW1iZXIgdGhpbmdzIiwKICAgICAgICAgICBiZWxpZWZzID0gImhhdmUgYmVsaWVmcywgbGlrZSB3aGVuIHlvdSB0aGluayBzb21ldGhpbmcgaXMgdHJ1ZSIsCiAgICAgICAgICAgaHVuZ3J5ID0gImdldCBodW5ncnkiLAogICAgICAgICAgIHRpcmVkID0gImZlZWwgdGlyZWQiLAogICAgICAgICAgIHBhaW4gPSAiZmVlbCBwYWluIiwKICAgICAgICAgICBuYXVzZWF0ZWQgPSAiZmVlbCBzaWNrLCBsaWtlIHdoZW4geW91IGZlZWwgbGlrZSB5b3UgbWlnaHQgdGhyb3cgdXAiLAogICAgICAgICAgIHNhZmUgPSAiZmVlbCBzYWZlIiwKICAgICAgICAgICBsb3ZlID0gImZlZWwgbG92ZSIsCiAgICAgICAgICAgcmVjb2duaXppbmcgPSAicmVjb2duaXplIHNvbWVib2R5IGVsc2UiLAogICAgICAgICAgIGNvbW11bmljYXRpbmcgPSAiY29tbXVuaWNhdGUgd2l0aCBzb21lYm9keSBlbHNlIiwKICAgICAgICAgICBndWlsdCA9ICJmZWVsIGd1aWx0eSIsCiAgICAgICAgICAgZGlzcmVzcGVjdGVkID0gImdldCBodXJ0IGZlZWxpbmdzIiwKICAgICAgICAgICBmcmVlX3dpbGwgPSAiZGVjaWRlIHdoYXQgdG8gZG8iLAogICAgICAgICAgIGNob2ljZXMgPSAibWFrZSBjaG9pY2VzIiwKICAgICAgICAgICBzZWxmX3Jlc3RyYWludCA9ICJoYXZlIHNlbGYtY29udHJvbCwgbGlrZSB3aGVuIHlvdSBzdG9wIHlvdXJzZWxmIGZyb20gZG9pbmcgc29tZXRoaW5nIHlvdSBzaG91bGRuJ3QgZG8iLAogICAgICAgICAgIGludGVudGlvbnMgPSAibWFrZSBwbGFucyIsCiAgICAgICAgICAgZ29hbCA9ICJoYXZlIGdvYWxzLCBsaWtlIHdoZW4geW91J3JlIHdvcmtpbmcgaGFyZCB0byBkbyBzb21ldGhpbmcgb3IgbWFrZSBzb21ldGhpbmcgaGFwcGVuIiwKICAgICAgICAgICBjb25zY2lvdXMgPSAiYmUgYXdhcmUgb2YgdGhpbmdzIiwKICAgICAgICAgICBzZWxmX2F3YXJlID0gImJlIGF3YXJlIG9mIGl0c2VsZiIsCiAgICAgICAgICAgZGVzaXJlcyA9ICJoYXZlIGRlc2lyZXMsIGxpa2Ugd2hlbiB5b3UgcmVhbGx5IHdhbnQgc29tZXRoaW5nIiwKICAgICAgICAgICBlbWJhcnJhc3NlZCA9ICJmZWVsIGVtYmFycmFzc2VkIiwKICAgICAgICAgICBlbW9fcmVjb2cgPSAidW5kZXJzdGFuZCBob3cgc29tZWJvZHkgZWxzZSBpcyBmZWVsaW5nIiwKICAgICAgICAgICBqb3kgPSAiZmVlbCBqb3kiLAogICAgICAgICAgIG1vcmFsaXR5ID0gImtub3cgd2hhdCdzIG5pY2UgYW5kIHdoYXQncyBtZWFuIiwKICAgICAgICAgICBwZXJzb25hbGl0eSA9ICJoYXZlIGEgcGVyc29uYWxpdHksIGxpa2Ugd2hlbiBzb21lb25lIGlzIHNoeSBhbmQgc29tZWJvZHkgZWxzZSBpcyBzaWxseSIsCiAgICAgICAgICAgcGxlYXN1cmUgPSAiZmVlbCBwbGVhc3VyZSwgbGlrZSB3aGVuIHNvbWV0aGluZyBmZWVscyByZWFsbHkgZ29vZCIsCiAgICAgICAgICAgcHJvdWQgPSAiZmVlbCBwcm91ZCIpKSkgJT4lCiAgICBtdXRhdGUoc2hvcnQgPSBmYWN0b3IoCiAgICAgIHJlY29kZShpdGVtLAogICAgICAgICAgICAgaGFwcHkgPSAiaGFwcHkiLAogICAgICAgICAgICAgZGVwcmVzc2VkID0gInNhZCIsCiAgICAgICAgICAgZmVhciA9ICJzY2FyZWQiLAogICAgICAgICAgIGFuZ3J5ID0gImFuZ3J5IiwKICAgICAgICAgICBjYWxtID0gImNhbG0iLAogICAgICAgICAgIHNvdW5kcyA9ICJoZWFyIiwKICAgICAgICAgICBzZWVpbmcgPSAic2VlIiwKICAgICAgICAgICB0ZW1wZXJhdHVyZSA9ICJ0ZW1wZXJhdHVyZXMiLAogICAgICAgICAgIG9kb3JzID0gInNtZWxsIiwKICAgICAgICAgICBkZXB0aCA9ICJkZXB0aCIsCiAgICAgICAgICAgY29tcHV0YXRpb25zID0gIm1hdGgiLAogICAgICAgICAgIHRob3VnaHRzID0gInRob3VnaHRzIiwKICAgICAgICAgICByZWFzb25pbmcgPSAiZmlndXJlIG91dCIsCiAgICAgICAgICAgcmVtZW1iZXJpbmcgPSAicmVtZW1iZXIiLAogICAgICAgICAgIGJlbGllZnMgPSAiYmVsaWVmcyIsCiAgICAgICAgICAgaHVuZ3J5ID0gImh1bmdyeSIsCiAgICAgICAgICAgdGlyZWQgPSAidGlyZWQiLAogICAgICAgICAgIHBhaW4gPSAicGFpbiIsCiAgICAgICAgICAgbmF1c2VhdGVkID0gInNpY2siLAogICAgICAgICAgIHNhZmUgPSAic2FmZSIsCiAgICAgICAgICAgbG92ZSA9ICJsb3ZlIiwKICAgICAgICAgICByZWNvZ25pemluZyA9ICJyZWNvZ25pemUiLAogICAgICAgICAgIGNvbW11bmljYXRpbmcgPSAiY29tbXVuaWNhdGUiLAogICAgICAgICAgIGd1aWx0ID0gImd1aWx0eSIsCiAgICAgICAgICAgZGlzcmVzcGVjdGVkID0gImh1cnQgZmVlbGluZ3MiLAogICAgICAgICAgIGZyZWVfd2lsbCA9ICJkZWNpZGUiLAogICAgICAgICAgIGNob2ljZXMgPSAiY2hvaWNlcyIsCiAgICAgICAgICAgc2VsZl9yZXN0cmFpbnQgPSAic2VsZi1jb250cm9sIiwKICAgICAgICAgICBpbnRlbnRpb25zID0gInBsYW5zIiwKICAgICAgICAgICBnb2FsID0gImdvYWxzIiwKICAgICAgICAgICBjb25zY2lvdXMgPSAiYXdhcmUiLAogICAgICAgICAgIHNlbGZfYXdhcmUgPSAic2VsZi1hd2FyZSIsCiAgICAgICAgICAgZGVzaXJlcyA9ICJkZXNpcmVzIiwKICAgICAgICAgICBlbWJhcnJhc3NlZCA9ICJlbWJhcnJhc3NlZCIsCiAgICAgICAgICAgZW1vX3JlY29nID0gImVtcGF0aHkiLAogICAgICAgICAgIGpveSA9ICJqb3kiLAogICAgICAgICAgIG1vcmFsaXR5ID0gIm1vcmFsaXR5IiwKICAgICAgICAgICBwZXJzb25hbGl0eSA9ICJwZXJzb25hbGl0eSIsCiAgICAgICAgICAgcGxlYXN1cmUgPSAicGxlYXN1cmUiLAogICAgICAgICAgIHByb3VkID0gInByb3VkIikpKQoKIyBtYWtlIGRhdGFmcmFtZSBmb3IgcGxvdHRpbmcKc2NhdHRlcl9wbG90dGluZyA8LSBsb2FkaW5ncyhlZmFfZDFfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIml0ZW0iKSAlPiUKICByZW5hbWUoQk9EWSA9IE1SMSwKICAgICAgICAgSEVBUlQgPSBNUjIsCiAgICAgICAgIE1JTkQgPSBNUjMpICU+JQogIGZ1bGxfam9pbih3b3JkaW5nX3MxKSAlPiUKICBtdXRhdGUoZG9taW5hbnQgPSBmYWN0b3IoCiAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKEJPRFkpLCAiQk9EWSIsCiAgICAgICAgICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhIRUFSVCksICJIRUFSVCIsCiAgICAgICAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoTUlORCksICJNSU5EIiwKICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKSwKICAgIHNpemUgPSBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKEJPRFkpLCBhYnMoQk9EWSksCiAgICAgICAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoSEVBUlQpLCBhYnMoSEVBUlQpLAogICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhNSU5EKSwgYWJzKE1JTkQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpLAogICAgY29sb3IgPSBpZmVsc2UoZG9taW5hbnQgPT0gIkJPRFkiLCAiI0U0MUExQyIsCiAgICAgICAgICAgICAgICAgICBpZmVsc2UoZG9taW5hbnQgPT0gIkhFQVJUIiwgIiMzNzdFQjgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShkb21pbmFudCA9PSAiTUlORCIsICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpCgojIHBsb3QhCmZpZ1MxIDwtIHBsb3RfbHkoc2NhdHRlcl9wbG90dGluZywgeCA9IH5IRUFSVCwgeSA9IH5CT0RZLCB6ID0gfk1JTkQsCiAgICAgICAgICAgICB0eXBlID0gInNjYXR0ZXIzZCIsCiAgICAgICAgICAgICBjb2xvciA9IH5kb21pbmFudCwgY29sb3JzID0gYygiIzM3N0VCOCIsICIjNERBRjRBIiwgIiNFNDFBMUMiKSwKICAgICAgICAgICAgIG1hcmtlciA9IGxpc3Qoc2l6ZSA9IDQpLAogICAgICAgICAgICAgdGV4dCA9IH5zaG9ydCwKICAgICAgICAgICAgIHRleHRmb250ID0gbGlzdChzaXplID0gMTUpLAogICAgICAgICAgICAgbW9kZSA9ICJ0ZXh0K21hcmtlcnMiLAogICAgICAgICAgICAgc2hvd2xlZ2VuZCA9IFRSVUUpCgpmaWdTMQpgYGAKCiMjIyBTdHVkeSAyICg3LTl5bykKCmBgYHtyIGZpZ3VyZSAzZCBzY2F0dGVyIHMyfQojIHNldCB1cCBsYWJlbHMgZm9yIHBsb3QgKHNob3J0ZW5lZCB2ZXJzaW9uIG9mIG1lbnRhbCBjYXBhY2l0eSBpdGVtcykKd29yZGluZ19zMiA8LSBsb2FkaW5ncyhlZmFfZDJfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIml0ZW0iKSAlPiUKICBzZWxlY3QoaXRlbSkgJT4lCiAgbXV0YXRlKHdvcmRpbmcgPSBmYWN0b3IoCiAgICByZWNvZGUoaXRlbSwKICAgICAgICAgICBoYXBweSA9ICJmZWVsIGhhcHB5IiwKICAgICAgICAgICBkZXByZXNzZWQgPSAiZmVlbCBzYWQiLAogICAgICAgICAgIGZlYXIgPSAiZmVlbCBzY2FyZWQiLAogICAgICAgICAgIGFuZ3J5ID0gImdldCBhbmdyeSIsCiAgICAgICAgICAgY2FsbSA9ICJmZWVsIGNhbG0iLAogICAgICAgICAgIHNvdW5kcyA9ICJoZWFyIHNvdW5kcyIsCiAgICAgICAgICAgc2VlaW5nID0gInNlZSB0aGluZ3MiLAogICAgICAgICAgIHRlbXBlcmF0dXJlID0gInNlbnNlIHRlbXBlcmF0dXJlcyIsCiAgICAgICAgICAgb2RvcnMgPSAic21lbGwgdGhpbmdzIiwKICAgICAgICAgICBkZXB0aCA9ICJzZW5zZSB3aGV0aGVyIHNvbWV0aGluZyBpcyBjbG9zZSBieSBvciBmYXIgYXdheSIsCiAgICAgICAgICAgY29tcHV0YXRpb25zID0gImRvIG1hdGgiLAogICAgICAgICAgIHRob3VnaHRzID0gImhhdmUgdGhvdWdodHMiLAogICAgICAgICAgIHJlYXNvbmluZyA9ICJmaWd1cmUgb3V0IGhvdyB0byBkbyB0aGluZ3MiLAogICAgICAgICAgIHJlbWVtYmVyaW5nID0gInJlbWVtYmVyIHRoaW5ncyIsCiAgICAgICAgICAgYmVsaWVmcyA9ICJoYXZlIGJlbGllZnMsIGxpa2Ugd2hlbiB5b3UgdGhpbmsgc29tZXRoaW5nIGlzIHRydWUiLAogICAgICAgICAgIGh1bmdyeSA9ICJnZXQgaHVuZ3J5IiwKICAgICAgICAgICB0aXJlZCA9ICJmZWVsIHRpcmVkIiwKICAgICAgICAgICBwYWluID0gImZlZWwgcGFpbiIsCiAgICAgICAgICAgbmF1c2VhdGVkID0gImZlZWwgc2ljaywgbGlrZSB3aGVuIHlvdSBmZWVsIGxpa2UgeW91IG1pZ2h0IHRocm93IHVwIiwKICAgICAgICAgICBzYWZlID0gImZlZWwgc2FmZSIsCiAgICAgICAgICAgbG92ZSA9ICJmZWVsIGxvdmUiLAogICAgICAgICAgIHJlY29nbml6aW5nID0gInJlY29nbml6ZSBzb21lYm9keSBlbHNlIiwKICAgICAgICAgICBjb21tdW5pY2F0aW5nID0gImNvbW11bmljYXRlIHdpdGggc29tZWJvZHkgZWxzZSIsCiAgICAgICAgICAgZ3VpbHQgPSAiZmVlbCBndWlsdHkiLAogICAgICAgICAgIGRpc3Jlc3BlY3RlZCA9ICJnZXQgaHVydCBmZWVsaW5ncyIsCiAgICAgICAgICAgZnJlZV93aWxsID0gImRlY2lkZSB3aGF0IHRvIGRvIiwKICAgICAgICAgICBjaG9pY2VzID0gIm1ha2UgY2hvaWNlcyIsCiAgICAgICAgICAgc2VsZl9yZXN0cmFpbnQgPSAiaGF2ZSBzZWxmLWNvbnRyb2wsIGxpa2Ugd2hlbiB5b3Ugc3RvcCB5b3Vyc2VsZiBmcm9tIGRvaW5nIHNvbWV0aGluZyB5b3Ugc2hvdWxkbid0IGRvIiwKICAgICAgICAgICBpbnRlbnRpb25zID0gIm1ha2UgcGxhbnMiLAogICAgICAgICAgIGdvYWwgPSAiaGF2ZSBnb2FscywgbGlrZSB3aGVuIHlvdSdyZSB3b3JraW5nIGhhcmQgdG8gZG8gc29tZXRoaW5nIG9yIG1ha2Ugc29tZXRoaW5nIGhhcHBlbiIsCiAgICAgICAgICAgY29uc2Npb3VzID0gImJlIGF3YXJlIG9mIHRoaW5ncyIsCiAgICAgICAgICAgc2VsZl9hd2FyZSA9ICJiZSBhd2FyZSBvZiBpdHNlbGYiLAogICAgICAgICAgIGRlc2lyZXMgPSAiaGF2ZSBkZXNpcmVzLCBsaWtlIHdoZW4geW91IHJlYWxseSB3YW50IHNvbWV0aGluZyIsCiAgICAgICAgICAgZW1iYXJyYXNzZWQgPSAiZmVlbCBlbWJhcnJhc3NlZCIsCiAgICAgICAgICAgZW1vX3JlY29nID0gInVuZGVyc3RhbmQgaG93IHNvbWVib2R5IGVsc2UgaXMgZmVlbGluZyIsCiAgICAgICAgICAgam95ID0gImZlZWwgam95IiwKICAgICAgICAgICBtb3JhbGl0eSA9ICJrbm93IHdoYXQncyBuaWNlIGFuZCB3aGF0J3MgbWVhbiIsCiAgICAgICAgICAgcGVyc29uYWxpdHkgPSAiaGF2ZSBhIHBlcnNvbmFsaXR5LCBsaWtlIHdoZW4gc29tZW9uZSBpcyBzaHkgYW5kIHNvbWVib2R5IGVsc2UgaXMgc2lsbHkiLAogICAgICAgICAgIHBsZWFzdXJlID0gImZlZWwgcGxlYXN1cmUsIGxpa2Ugd2hlbiBzb21ldGhpbmcgZmVlbHMgcmVhbGx5IGdvb2QiLAogICAgICAgICAgIHByb3VkID0gImZlZWwgcHJvdWQiKSkpICU+JQogICAgbXV0YXRlKHNob3J0ID0gZmFjdG9yKAogICAgICByZWNvZGUoaXRlbSwKICAgICAgICAgICAgIGhhcHB5ID0gImhhcHB5IiwKICAgICAgICAgICAgIGRlcHJlc3NlZCA9ICJzYWQiLAogICAgICAgICAgIGZlYXIgPSAic2NhcmVkIiwKICAgICAgICAgICBhbmdyeSA9ICJhbmdyeSIsCiAgICAgICAgICAgY2FsbSA9ICJjYWxtIiwKICAgICAgICAgICBzb3VuZHMgPSAiaGVhciIsCiAgICAgICAgICAgc2VlaW5nID0gInNlZSIsCiAgICAgICAgICAgdGVtcGVyYXR1cmUgPSAidGVtcGVyYXR1cmVzIiwKICAgICAgICAgICBvZG9ycyA9ICJzbWVsbCIsCiAgICAgICAgICAgZGVwdGggPSAiZGVwdGgiLAogICAgICAgICAgIGNvbXB1dGF0aW9ucyA9ICJtYXRoIiwKICAgICAgICAgICB0aG91Z2h0cyA9ICJ0aG91Z2h0cyIsCiAgICAgICAgICAgcmVhc29uaW5nID0gImZpZ3VyZSBvdXQiLAogICAgICAgICAgIHJlbWVtYmVyaW5nID0gInJlbWVtYmVyIiwKICAgICAgICAgICBiZWxpZWZzID0gImJlbGllZnMiLAogICAgICAgICAgIGh1bmdyeSA9ICJodW5ncnkiLAogICAgICAgICAgIHRpcmVkID0gInRpcmVkIiwKICAgICAgICAgICBwYWluID0gInBhaW4iLAogICAgICAgICAgIG5hdXNlYXRlZCA9ICJzaWNrIiwKICAgICAgICAgICBzYWZlID0gInNhZmUiLAogICAgICAgICAgIGxvdmUgPSAibG92ZSIsCiAgICAgICAgICAgcmVjb2duaXppbmcgPSAicmVjb2duaXplIiwKICAgICAgICAgICBjb21tdW5pY2F0aW5nID0gImNvbW11bmljYXRlIiwKICAgICAgICAgICBndWlsdCA9ICJndWlsdHkiLAogICAgICAgICAgIGRpc3Jlc3BlY3RlZCA9ICJodXJ0IGZlZWxpbmdzIiwKICAgICAgICAgICBmcmVlX3dpbGwgPSAiZGVjaWRlIiwKICAgICAgICAgICBjaG9pY2VzID0gImNob2ljZXMiLAogICAgICAgICAgIHNlbGZfcmVzdHJhaW50ID0gInNlbGYtY29udHJvbCIsCiAgICAgICAgICAgaW50ZW50aW9ucyA9ICJwbGFucyIsCiAgICAgICAgICAgZ29hbCA9ICJnb2FscyIsCiAgICAgICAgICAgY29uc2Npb3VzID0gImF3YXJlIiwKICAgICAgICAgICBzZWxmX2F3YXJlID0gInNlbGYtYXdhcmUiLAogICAgICAgICAgIGRlc2lyZXMgPSAiZGVzaXJlcyIsCiAgICAgICAgICAgZW1iYXJyYXNzZWQgPSAiZW1iYXJyYXNzZWQiLAogICAgICAgICAgIGVtb19yZWNvZyA9ICJlbXBhdGh5IiwKICAgICAgICAgICBqb3kgPSAiam95IiwKICAgICAgICAgICBtb3JhbGl0eSA9ICJtb3JhbGl0eSIsCiAgICAgICAgICAgcGVyc29uYWxpdHkgPSAicGVyc29uYWxpdHkiLAogICAgICAgICAgIHBsZWFzdXJlID0gInBsZWFzdXJlIiwKICAgICAgICAgICBwcm91ZCA9ICJwcm91ZCIpKSkKCiMgbWFrZSBkYXRhZnJhbWUgZm9yIHBsb3R0aW5nCnNjYXR0ZXJfcGxvdHRpbmcgPC0gbG9hZGluZ3MoZWZhX2QyX2FsbF9yb3RhdGVkTilbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJpdGVtIikgJT4lCiAgcmVuYW1lKEJPRFkgPSBNUjEsCiAgICAgICAgIEhFQVJUID0gTVIyLAogICAgICAgICBNSU5EID0gTVIzKSAlPiUKICBmdWxsX2pvaW4od29yZGluZ19zMikgJT4lCiAgbXV0YXRlKGRvbWluYW50ID0gZmFjdG9yKAogICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhCT0RZKSwgIkJPRFkiLAogICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoSEVBUlQpLCAiSEVBUlQiLAogICAgICAgICAgICAgICAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKE1JTkQpLCAiTUlORCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSksCiAgICBzaXplID0gaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhCT0RZKSwgYWJzKEJPRFkpLAogICAgICAgICAgICAgICAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKEhFQVJUKSwgYWJzKEhFQVJUKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoTUlORCksIGFicyhNSU5EKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSwKICAgIGNvbG9yID0gaWZlbHNlKGRvbWluYW50ID09ICJCT0RZIiwgIiNFNDFBMUMiLAogICAgICAgICAgICAgICAgICAgaWZlbHNlKGRvbWluYW50ID09ICJIRUFSVCIsICIjNERBRjRBIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZG9taW5hbnQgPT0gIk1JTkQiLCAiI0U0MUExQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BKSkpKQoKIyBwbG90IQpmaWdTMiA8LSBwbG90X2x5KHNjYXR0ZXJfcGxvdHRpbmcsIHggPSB+SEVBUlQsIHkgPSB+Qk9EWSwgeiA9IH5NSU5ELAogICAgICAgICAgICAgdHlwZSA9ICJzY2F0dGVyM2QiLAogICAgICAgICAgICAgY29sb3IgPSB+ZG9taW5hbnQsIGNvbG9ycyA9IGMoIiMzNzdFQjgiLCAiIzREQUY0QSIsICIjRTQxQTFDIiksCiAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KHNpemUgPSA0KSwKICAgICAgICAgICAgIHRleHQgPSB+c2hvcnQsCiAgICAgICAgICAgICB0ZXh0Zm9udCA9IGxpc3Qoc2l6ZSA9IDE1KSwKICAgICAgICAgICAgIG1vZGUgPSAidGV4dCttYXJrZXJzIiwKICAgICAgICAgICAgIHNob3dsZWdlbmQgPSBUUlVFKQoKZmlnUzIKYGBgCgojIyMgU3R1ZHkgMyAoNy05eW8pCgpgYGB7ciBmaWd1cmUgM2Qgc2NhdHRlciBzM30KIyBzZXQgdXAgbGFiZWxzIGZvciBwbG90IChzaG9ydGVuZWQgdmVyc2lvbiBvZiBtZW50YWwgY2FwYWNpdHkgaXRlbXMpCndvcmRpbmdfczMgPC0gbG9hZGluZ3MoZWZhX2QzX2FsbF9yb3RhdGVkTilbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJpdGVtIikgJT4lCiAgc2VsZWN0KGl0ZW0pICU+JQogIG11dGF0ZSh3b3JkaW5nID0gZmFjdG9yKAogICAgcmVjb2RlKGl0ZW0sCiAgICAgICAgICAgaGFwcHkgPSAiZmVlbCBoYXBweSIsCiAgICAgICAgICAgZGVwcmVzc2VkID0gImZlZWwgc2FkIiwKICAgICAgICAgICBmZWFyID0gImZlZWwgc2NhcmVkIiwKICAgICAgICAgICBhbmdyeSA9ICJnZXQgYW5ncnkiLAogICAgICAgICAgIGNhbG0gPSAiZmVlbCBjYWxtIiwKICAgICAgICAgICBzb3VuZHMgPSAiaGVhciBzb3VuZHMiLAogICAgICAgICAgIHNlZWluZyA9ICJzZWUgdGhpbmdzIiwKICAgICAgICAgICB0ZW1wZXJhdHVyZSA9ICJzZW5zZSB0ZW1wZXJhdHVyZXMiLAogICAgICAgICAgIG9kb3JzID0gInNtZWxsIHRoaW5ncyIsCiAgICAgICAgICAgZGVwdGggPSAic2Vuc2Ugd2hldGhlciBzb21ldGhpbmcgaXMgY2xvc2UgYnkgb3IgZmFyIGF3YXkiLAogICAgICAgICAgIGNvbXB1dGF0aW9ucyA9ICJkbyBtYXRoIiwKICAgICAgICAgICB0aG91Z2h0cyA9ICJoYXZlIHRob3VnaHRzIiwKICAgICAgICAgICByZWFzb25pbmcgPSAiZmlndXJlIG91dCBob3cgdG8gZG8gdGhpbmdzIiwKICAgICAgICAgICByZW1lbWJlcmluZyA9ICJyZW1lbWJlciB0aGluZ3MiLAogICAgICAgICAgIGJlbGllZnMgPSAiaGF2ZSBiZWxpZWZzLCBsaWtlIHdoZW4geW91IHRoaW5rIHNvbWV0aGluZyBpcyB0cnVlIiwKICAgICAgICAgICBodW5ncnkgPSAiZ2V0IGh1bmdyeSIsCiAgICAgICAgICAgdGlyZWQgPSAiZmVlbCB0aXJlZCIsCiAgICAgICAgICAgcGFpbiA9ICJmZWVsIHBhaW4iLAogICAgICAgICAgIG5hdXNlYXRlZCA9ICJmZWVsIHNpY2ssIGxpa2Ugd2hlbiB5b3UgZmVlbCBsaWtlIHlvdSBtaWdodCB0aHJvdyB1cCIsCiAgICAgICAgICAgc2FmZSA9ICJmZWVsIHNhZmUiLAogICAgICAgICAgIGxvdmUgPSAiZmVlbCBsb3ZlIiwKICAgICAgICAgICByZWNvZ25pemluZyA9ICJyZWNvZ25pemUgc29tZWJvZHkgZWxzZSIsCiAgICAgICAgICAgY29tbXVuaWNhdGluZyA9ICJjb21tdW5pY2F0ZSB3aXRoIHNvbWVib2R5IGVsc2UiLAogICAgICAgICAgIGd1aWx0ID0gImZlZWwgZ3VpbHR5IiwKICAgICAgICAgICBkaXNyZXNwZWN0ZWQgPSAiZ2V0IGh1cnQgZmVlbGluZ3MiLAogICAgICAgICAgIGZyZWVfd2lsbCA9ICJkZWNpZGUgd2hhdCB0byBkbyIsCiAgICAgICAgICAgY2hvaWNlcyA9ICJtYWtlIGNob2ljZXMiLAogICAgICAgICAgIHNlbGZfcmVzdHJhaW50ID0gImhhdmUgc2VsZi1jb250cm9sLCBsaWtlIHdoZW4geW91IHN0b3AgeW91cnNlbGYgZnJvbSBkb2luZyBzb21ldGhpbmcgeW91IHNob3VsZG4ndCBkbyIsCiAgICAgICAgICAgaW50ZW50aW9ucyA9ICJtYWtlIHBsYW5zIiwKICAgICAgICAgICBnb2FsID0gImhhdmUgZ29hbHMsIGxpa2Ugd2hlbiB5b3UncmUgd29ya2luZyBoYXJkIHRvIGRvIHNvbWV0aGluZyBvciBtYWtlIHNvbWV0aGluZyBoYXBwZW4iLAogICAgICAgICAgIGNvbnNjaW91cyA9ICJiZSBhd2FyZSBvZiB0aGluZ3MiLAogICAgICAgICAgIHNlbGZfYXdhcmUgPSAiYmUgYXdhcmUgb2YgaXRzZWxmIiwKICAgICAgICAgICBkZXNpcmVzID0gImhhdmUgZGVzaXJlcywgbGlrZSB3aGVuIHlvdSByZWFsbHkgd2FudCBzb21ldGhpbmciLAogICAgICAgICAgIGVtYmFycmFzc2VkID0gImZlZWwgZW1iYXJyYXNzZWQiLAogICAgICAgICAgIGVtb19yZWNvZyA9ICJ1bmRlcnN0YW5kIGhvdyBzb21lYm9keSBlbHNlIGlzIGZlZWxpbmciLAogICAgICAgICAgIGpveSA9ICJmZWVsIGpveSIsCiAgICAgICAgICAgbW9yYWxpdHkgPSAia25vdyB3aGF0J3MgbmljZSBhbmQgd2hhdCdzIG1lYW4iLAogICAgICAgICAgIHBlcnNvbmFsaXR5ID0gImhhdmUgYSBwZXJzb25hbGl0eSwgbGlrZSB3aGVuIHNvbWVvbmUgaXMgc2h5IGFuZCBzb21lYm9keSBlbHNlIGlzIHNpbGx5IiwKICAgICAgICAgICBwbGVhc3VyZSA9ICJmZWVsIHBsZWFzdXJlLCBsaWtlIHdoZW4gc29tZXRoaW5nIGZlZWxzIHJlYWxseSBnb29kIiwKICAgICAgICAgICBwcm91ZCA9ICJmZWVsIHByb3VkIikpKSAlPiUKICAgIG11dGF0ZShzaG9ydCA9IGZhY3RvcigKICAgICAgcmVjb2RlKGl0ZW0sCiAgICAgICAgICAgICBoYXBweSA9ICJoYXBweSIsCiAgICAgICAgICAgICBkZXByZXNzZWQgPSAic2FkIiwKICAgICAgICAgICBmZWFyID0gInNjYXJlZCIsCiAgICAgICAgICAgYW5ncnkgPSAiYW5ncnkiLAogICAgICAgICAgIGNhbG0gPSAiY2FsbSIsCiAgICAgICAgICAgc291bmRzID0gImhlYXIiLAogICAgICAgICAgIHNlZWluZyA9ICJzZWUiLAogICAgICAgICAgIHRlbXBlcmF0dXJlID0gInRlbXBlcmF0dXJlcyIsCiAgICAgICAgICAgb2RvcnMgPSAic21lbGwiLAogICAgICAgICAgIGRlcHRoID0gImRlcHRoIiwKICAgICAgICAgICBjb21wdXRhdGlvbnMgPSAibWF0aCIsCiAgICAgICAgICAgdGhvdWdodHMgPSAidGhvdWdodHMiLAogICAgICAgICAgIHJlYXNvbmluZyA9ICJmaWd1cmUgb3V0IiwKICAgICAgICAgICByZW1lbWJlcmluZyA9ICJyZW1lbWJlciIsCiAgICAgICAgICAgYmVsaWVmcyA9ICJiZWxpZWZzIiwKICAgICAgICAgICBodW5ncnkgPSAiaHVuZ3J5IiwKICAgICAgICAgICB0aXJlZCA9ICJ0aXJlZCIsCiAgICAgICAgICAgcGFpbiA9ICJwYWluIiwKICAgICAgICAgICBuYXVzZWF0ZWQgPSAic2ljayIsCiAgICAgICAgICAgc2FmZSA9ICJzYWZlIiwKICAgICAgICAgICBsb3ZlID0gImxvdmUiLAogICAgICAgICAgIHJlY29nbml6aW5nID0gInJlY29nbml6ZSIsCiAgICAgICAgICAgY29tbXVuaWNhdGluZyA9ICJjb21tdW5pY2F0ZSIsCiAgICAgICAgICAgZ3VpbHQgPSAiZ3VpbHR5IiwKICAgICAgICAgICBkaXNyZXNwZWN0ZWQgPSAiaHVydCBmZWVsaW5ncyIsCiAgICAgICAgICAgZnJlZV93aWxsID0gImRlY2lkZSIsCiAgICAgICAgICAgY2hvaWNlcyA9ICJjaG9pY2VzIiwKICAgICAgICAgICBzZWxmX3Jlc3RyYWludCA9ICJzZWxmLWNvbnRyb2wiLAogICAgICAgICAgIGludGVudGlvbnMgPSAicGxhbnMiLAogICAgICAgICAgIGdvYWwgPSAiZ29hbHMiLAogICAgICAgICAgIGNvbnNjaW91cyA9ICJhd2FyZSIsCiAgICAgICAgICAgc2VsZl9hd2FyZSA9ICJzZWxmLWF3YXJlIiwKICAgICAgICAgICBkZXNpcmVzID0gImRlc2lyZXMiLAogICAgICAgICAgIGVtYmFycmFzc2VkID0gImVtYmFycmFzc2VkIiwKICAgICAgICAgICBlbW9fcmVjb2cgPSAiZW1wYXRoeSIsCiAgICAgICAgICAgam95ID0gImpveSIsCiAgICAgICAgICAgbW9yYWxpdHkgPSAibW9yYWxpdHkiLAogICAgICAgICAgIHBlcnNvbmFsaXR5ID0gInBlcnNvbmFsaXR5IiwKICAgICAgICAgICBwbGVhc3VyZSA9ICJwbGVhc3VyZSIsCiAgICAgICAgICAgcHJvdWQgPSAicHJvdWQiKSkpCgojIG1ha2UgZGF0YWZyYW1lIGZvciBwbG90dGluZwpzY2F0dGVyX3Bsb3R0aW5nIDwtIGxvYWRpbmdzKGVmYV9kM19hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiaXRlbSIpICU+JQogIHJlbmFtZShCT0RZID0gTVIxLAogICAgICAgICBIRUFSVCA9IE1SMiwKICAgICAgICAgTUlORCA9IE1SMykgJT4lCiAgZnVsbF9qb2luKHdvcmRpbmdfczMpICU+JQogIG11dGF0ZShkb21pbmFudCA9IGZhY3RvcigKICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoQk9EWSksICJCT0RZIiwKICAgICAgICAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKEhFQVJUKSwgIkhFQVJUIiwKICAgICAgICAgICAgICAgICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhNSU5EKSwgIk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpLAogICAgc2l6ZSA9IGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoQk9EWSksIGFicyhCT0RZKSwKICAgICAgICAgICAgICAgICAgaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhIRUFSVCksIGFicyhIRUFSVCksCiAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKE1JTkQpLCBhYnMoTUlORCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSksCiAgICBjb2xvciA9IGlmZWxzZShkb21pbmFudCA9PSAiQk9EWSIsICIjRTQxQTFDIiwKICAgICAgICAgICAgICAgICAgIGlmZWxzZShkb21pbmFudCA9PSAiSEVBUlQiLCAiIzREQUY0QSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGRvbWluYW50ID09ICJNSU5EIiwgIiNFNDFBMUMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSkKCiMgcGxvdCEKZmlnczMgPC0gcGxvdF9seShzY2F0dGVyX3Bsb3R0aW5nLCB4ID0gfkhFQVJULCB5ID0gfkJPRFksIHogPSB+TUlORCwKICAgICAgICAgICAgIHR5cGUgPSAic2NhdHRlcjNkIiwKICAgICAgICAgICAgIGNvbG9yID0gfmRvbWluYW50LCBjb2xvcnMgPSBjKCIjMzc3RUI4IiwgIiM0REFGNEEiLCAiI0U0MUExQyIpLAogICAgICAgICAgICAgbWFya2VyID0gbGlzdChzaXplID0gNCksCiAgICAgICAgICAgICB0ZXh0ID0gfnNob3J0LAogICAgICAgICAgICAgdGV4dGZvbnQgPSBsaXN0KHNpemUgPSAxNSksCiAgICAgICAgICAgICBtb2RlID0gInRleHQrbWFya2VycyIsCiAgICAgICAgICAgICBzaG93bGVnZW5kID0gVFJVRSkKCmZpZ3MzCmBgYAoKIyMjIFN0dWR5IDQgKDQtNnlvKQoKYGBge3IgZmlndXJlIDNkIHNjYXR0ZXIgczR9CiMgc2V0IHVwIGxhYmVscyBmb3IgcGxvdCAoc2hvcnRlbmVkIHZlcnNpb24gb2YgbWVudGFsIGNhcGFjaXR5IGl0ZW1zKQp3b3JkaW5nX3M0IDwtIGxvYWRpbmdzKGVmYV9kNF9hbGxfcm90YXRlZE4pW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiaXRlbSIpICU+JQogIHNlbGVjdChpdGVtKSAlPiUKICBtdXRhdGUod29yZGluZyA9IGZhY3RvcigKICAgIHJlY29kZShpdGVtLAogICAgICAgICAgIGhhcHB5ID0gImZlZWwgaGFwcHkiLAogICAgICAgICAgIGRlcHJlc3NlZCA9ICJmZWVsIHNhZCIsCiAgICAgICAgICAgZmVhciA9ICJmZWVsIHNjYXJlZCIsCiAgICAgICAgICAgYW5ncnkgPSAiZ2V0IGFuZ3J5IiwKICAgICAgICAgICBjYWxtID0gImZlZWwgY2FsbSIsCiAgICAgICAgICAgc291bmRzID0gImhlYXIgc291bmRzIiwKICAgICAgICAgICBzZWVpbmcgPSAic2VlIHRoaW5ncyIsCiAgICAgICAgICAgdGVtcGVyYXR1cmUgPSAic2Vuc2UgdGVtcGVyYXR1cmVzIiwKICAgICAgICAgICBvZG9ycyA9ICJzbWVsbCB0aGluZ3MiLAogICAgICAgICAgIGRlcHRoID0gInNlbnNlIHdoZXRoZXIgc29tZXRoaW5nIGlzIGNsb3NlIGJ5IG9yIGZhciBhd2F5IiwKICAgICAgICAgICBjb21wdXRhdGlvbnMgPSAiZG8gbWF0aCIsCiAgICAgICAgICAgdGhvdWdodHMgPSAiaGF2ZSB0aG91Z2h0cyIsCiAgICAgICAgICAgcmVhc29uaW5nID0gImZpZ3VyZSBvdXQgaG93IHRvIGRvIHRoaW5ncyIsCiAgICAgICAgICAgcmVtZW1iZXJpbmcgPSAicmVtZW1iZXIgdGhpbmdzIiwKICAgICAgICAgICBiZWxpZWZzID0gImhhdmUgYmVsaWVmcywgbGlrZSB3aGVuIHlvdSB0aGluayBzb21ldGhpbmcgaXMgdHJ1ZSIsCiAgICAgICAgICAgaHVuZ3J5ID0gImdldCBodW5ncnkiLAogICAgICAgICAgIHRpcmVkID0gImZlZWwgdGlyZWQiLAogICAgICAgICAgIHBhaW4gPSAiZmVlbCBwYWluIiwKICAgICAgICAgICBuYXVzZWF0ZWQgPSAiZmVlbCBzaWNrLCBsaWtlIHdoZW4geW91IGZlZWwgbGlrZSB5b3UgbWlnaHQgdGhyb3cgdXAiLAogICAgICAgICAgIHNhZmUgPSAiZmVlbCBzYWZlIiwKICAgICAgICAgICBsb3ZlID0gImZlZWwgbG92ZSIsCiAgICAgICAgICAgcmVjb2duaXppbmcgPSAicmVjb2duaXplIHNvbWVib2R5IGVsc2UiLAogICAgICAgICAgIGNvbW11bmljYXRpbmcgPSAiY29tbXVuaWNhdGUgd2l0aCBzb21lYm9keSBlbHNlIiwKICAgICAgICAgICBndWlsdCA9ICJmZWVsIGd1aWx0eSIsCiAgICAgICAgICAgZGlzcmVzcGVjdGVkID0gImdldCBodXJ0IGZlZWxpbmdzIiwKICAgICAgICAgICBmcmVlX3dpbGwgPSAiZGVjaWRlIHdoYXQgdG8gZG8iLAogICAgICAgICAgIGNob2ljZXMgPSAibWFrZSBjaG9pY2VzIiwKICAgICAgICAgICBzZWxmX3Jlc3RyYWludCA9ICJoYXZlIHNlbGYtY29udHJvbCwgbGlrZSB3aGVuIHlvdSBzdG9wIHlvdXJzZWxmIGZyb20gZG9pbmcgc29tZXRoaW5nIHlvdSBzaG91bGRuJ3QgZG8iLAogICAgICAgICAgIGludGVudGlvbnMgPSAibWFrZSBwbGFucyIsCiAgICAgICAgICAgZ29hbCA9ICJoYXZlIGdvYWxzLCBsaWtlIHdoZW4geW91J3JlIHdvcmtpbmcgaGFyZCB0byBkbyBzb21ldGhpbmcgb3IgbWFrZSBzb21ldGhpbmcgaGFwcGVuIiwKICAgICAgICAgICBjb25zY2lvdXMgPSAiYmUgYXdhcmUgb2YgdGhpbmdzIiwKICAgICAgICAgICBzZWxmX2F3YXJlID0gImJlIGF3YXJlIG9mIGl0c2VsZiIsCiAgICAgICAgICAgZGVzaXJlcyA9ICJoYXZlIGRlc2lyZXMsIGxpa2Ugd2hlbiB5b3UgcmVhbGx5IHdhbnQgc29tZXRoaW5nIiwKICAgICAgICAgICBlbWJhcnJhc3NlZCA9ICJmZWVsIGVtYmFycmFzc2VkIiwKICAgICAgICAgICBlbW9fcmVjb2cgPSAidW5kZXJzdGFuZCBob3cgc29tZWJvZHkgZWxzZSBpcyBmZWVsaW5nIiwKICAgICAgICAgICBqb3kgPSAiZmVlbCBqb3kiLAogICAgICAgICAgIG1vcmFsaXR5ID0gImtub3cgd2hhdCdzIG5pY2UgYW5kIHdoYXQncyBtZWFuIiwKICAgICAgICAgICBwZXJzb25hbGl0eSA9ICJoYXZlIGEgcGVyc29uYWxpdHksIGxpa2Ugd2hlbiBzb21lb25lIGlzIHNoeSBhbmQgc29tZWJvZHkgZWxzZSBpcyBzaWxseSIsCiAgICAgICAgICAgcGxlYXN1cmUgPSAiZmVlbCBwbGVhc3VyZSwgbGlrZSB3aGVuIHNvbWV0aGluZyBmZWVscyByZWFsbHkgZ29vZCIsCiAgICAgICAgICAgcHJvdWQgPSAiZmVlbCBwcm91ZCIpKSkgJT4lCiAgICBtdXRhdGUoc2hvcnQgPSBmYWN0b3IoCiAgICAgIHJlY29kZShpdGVtLAogICAgICAgICAgICAgaGFwcHkgPSAiaGFwcHkiLAogICAgICAgICAgICAgZGVwcmVzc2VkID0gInNhZCIsCiAgICAgICAgICAgZmVhciA9ICJzY2FyZWQiLAogICAgICAgICAgIGFuZ3J5ID0gImFuZ3J5IiwKICAgICAgICAgICBjYWxtID0gImNhbG0iLAogICAgICAgICAgIHNvdW5kcyA9ICJoZWFyIiwKICAgICAgICAgICBzZWVpbmcgPSAic2VlIiwKICAgICAgICAgICB0ZW1wZXJhdHVyZSA9ICJ0ZW1wZXJhdHVyZXMiLAogICAgICAgICAgIG9kb3JzID0gInNtZWxsIiwKICAgICAgICAgICBkZXB0aCA9ICJkZXB0aCIsCiAgICAgICAgICAgY29tcHV0YXRpb25zID0gIm1hdGgiLAogICAgICAgICAgIHRob3VnaHRzID0gInRob3VnaHRzIiwKICAgICAgICAgICByZWFzb25pbmcgPSAiZmlndXJlIG91dCIsCiAgICAgICAgICAgcmVtZW1iZXJpbmcgPSAicmVtZW1iZXIiLAogICAgICAgICAgIGJlbGllZnMgPSAiYmVsaWVmcyIsCiAgICAgICAgICAgaHVuZ3J5ID0gImh1bmdyeSIsCiAgICAgICAgICAgdGlyZWQgPSAidGlyZWQiLAogICAgICAgICAgIHBhaW4gPSAicGFpbiIsCiAgICAgICAgICAgbmF1c2VhdGVkID0gInNpY2siLAogICAgICAgICAgIHNhZmUgPSAic2FmZSIsCiAgICAgICAgICAgbG92ZSA9ICJsb3ZlIiwKICAgICAgICAgICByZWNvZ25pemluZyA9ICJyZWNvZ25pemUiLAogICAgICAgICAgIGNvbW11bmljYXRpbmcgPSAiY29tbXVuaWNhdGUiLAogICAgICAgICAgIGd1aWx0ID0gImd1aWx0eSIsCiAgICAgICAgICAgZGlzcmVzcGVjdGVkID0gImh1cnQgZmVlbGluZ3MiLAogICAgICAgICAgIGZyZWVfd2lsbCA9ICJkZWNpZGUiLAogICAgICAgICAgIGNob2ljZXMgPSAiY2hvaWNlcyIsCiAgICAgICAgICAgc2VsZl9yZXN0cmFpbnQgPSAic2VsZi1jb250cm9sIiwKICAgICAgICAgICBpbnRlbnRpb25zID0gInBsYW5zIiwKICAgICAgICAgICBnb2FsID0gImdvYWxzIiwKICAgICAgICAgICBjb25zY2lvdXMgPSAiYXdhcmUiLAogICAgICAgICAgIHNlbGZfYXdhcmUgPSAic2VsZi1hd2FyZSIsCiAgICAgICAgICAgZGVzaXJlcyA9ICJkZXNpcmVzIiwKICAgICAgICAgICBlbWJhcnJhc3NlZCA9ICJlbWJhcnJhc3NlZCIsCiAgICAgICAgICAgZW1vX3JlY29nID0gImVtcGF0aHkiLAogICAgICAgICAgIGpveSA9ICJqb3kiLAogICAgICAgICAgIG1vcmFsaXR5ID0gIm1vcmFsaXR5IiwKICAgICAgICAgICBwZXJzb25hbGl0eSA9ICJwZXJzb25hbGl0eSIsCiAgICAgICAgICAgcGxlYXN1cmUgPSAicGxlYXN1cmUiLAogICAgICAgICAgIHByb3VkID0gInByb3VkIikpKQoKIyAjIG1ha2UgZGF0YWZyYW1lIGZvciBwbG90dGluZwojIHNjYXR0ZXJfcGxvdHRpbmcgPC0gbG9hZGluZ3MoZWZhX2Q0X2FsbF9yb3RhdGVkTilbXSAlPiUKIyAgIGRhdGEuZnJhbWUoKSAlPiUKIyAgIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiaXRlbSIpICU+JQojICAgcmVuYW1lKEJPRFkgPSBNUjEsCiMgICAgICAgICAgSEVBUlQgPSBNUjIsCiMgICAgICAgICAgTUlORCA9IE1SMykgJT4lCiMgICBmdWxsX2pvaW4od29yZGluZ19zNCkgJT4lCiMgICBtdXRhdGUoZG9taW5hbnQgPSBmYWN0b3IoCiMgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoQk9EWSksICJCT0RZIiwKIyAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoSEVBUlQpLCAiSEVBUlQiLAojICAgICAgICAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoTUlORCksICJNSU5EIiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpLAojICAgICBzaXplID0gaWZlbHNlKHBtYXgoYWJzKEJPRFkpLCBhYnMoSEVBUlQpLCBhYnMoTUlORCkpID09IGFicyhCT0RZKSwgYWJzKEJPRFkpLAojICAgICAgICAgICAgICAgICAgIGlmZWxzZShwbWF4KGFicyhCT0RZKSwgYWJzKEhFQVJUKSwgYWJzKE1JTkQpKSA9PSBhYnMoSEVBUlQpLCBhYnMoSEVBUlQpLAojICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UocG1heChhYnMoQk9EWSksIGFicyhIRUFSVCksIGFicyhNSU5EKSkgPT0gYWJzKE1JTkQpLCBhYnMoTUlORCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpKSwKIyAgICAgY29sb3IgPSBpZmVsc2UoZG9taW5hbnQgPT0gIkJPRFkiLCAiI0U0MUExQyIsCiMgICAgICAgICAgICAgICAgICAgIGlmZWxzZShkb21pbmFudCA9PSAiSEVBUlQiLCAiIzREQUY0QSIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZG9taW5hbnQgPT0gIk1JTkQiLCAiI0U0MUExQyIsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkEpKSkpCiMgCiMgIyBwbG90IQojIGZpZ3M0IDwtIHBsb3RfbHkoc2NhdHRlcl9wbG90dGluZywgeCA9IH5IRUFSVCwgeSA9IH5CT0RZLCB6ID0gfk1JTkQsCiMgICAgICAgICAgICAgIHR5cGUgPSAic2NhdHRlcjNkIiwKIyAgICAgICAgICAgICAgY29sb3IgPSB+ZG9taW5hbnQsIGNvbG9ycyA9IGMoIiMzNzdFQjgiLCAiIzREQUY0QSIsICIjRTQxQTFDIiksCiMgICAgICAgICAgICAgIG1hcmtlciA9IGxpc3Qoc2l6ZSA9IDQpLAojICAgICAgICAgICAgICB0ZXh0ID0gfnNob3J0LAojICAgICAgICAgICAgICB0ZXh0Zm9udCA9IGxpc3Qoc2l6ZSA9IDE1KSwKIyAgICAgICAgICAgICAgbW9kZSA9ICJ0ZXh0K21hcmtlcnMiLAojICAgICAgICAgICAgICBzaG93bGVnZW5kID0gVFJVRSkKIyAKIyBmaWdzNApgYGAKCiMjIEhlYXRtYXBzCgoqTk9URTogc2V0IHRvIDMgZmFjdG9ycyBtYW51YWxseSwgZm9yIG5vdy4qCgojIyMgU3R1ZHkgMSAoYWR1bHRzKQoKYGBge3IgZmlndXJlIGhlYXRtYXAgczEsIGZpZy53aWR0aCA9IDcsIGZpZy5oZWlnaHQgPSA3fQpmYWN0b3JzX3MxIDwtIGZhLnNvcnQoZmEoZDFfYWxsLCBuZmFjdG9ycyA9IDMsIGNvciA9IGNob3NlbkNvclR5cGUsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUpJGxvYWRpbmdzW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIml0ZW0iKSAlPiUKICBmdWxsX2pvaW4od29yZGluZ19zMSkgJT4lCiAgc2VsZWN0KHdvcmRpbmcsIE1SMSwgTVIyLCBNUjMpICU+JQogIHJlbmFtZShjYXBhY2l0eSA9IHdvcmRpbmcsIEZhY3RvcjEgPSBNUjEsIEZhY3RvcjIgPSBNUjIsIEZhY3RvcjMgPSBNUjMpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAib3JkZXIiKSAlPiUKICBtdXRhdGUob3JkZXIgPSBhcy5udW1lcmljKG9yZGVyKSkKCmZhY3RvcnNfczFfbG9uZyA8LSBmYWN0b3JzX3MxICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSwgLW9yZGVyKSAlPiUKICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGdzdWIoIkZhY3RvciIsICJGIiwgZmFjdG9yKSkpICU+JQogICMgbXV0YXRlKGZhY3RvciA9IGZhY3Rvcihnc3ViKCJGYWN0b3IiLCAiRiIsIGZhY3RvciksCiAgIyAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkYxIiwgIkYzIiwgIkYyIikpKSAlPiUKICAjIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZ3N1YigiRmFjdG9yIiwgIkYiLCBmYWN0b3IpLAogICMgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJGMiIsICJGMSIsICJGMyIpKSkgJT4lCiAgYXJyYW5nZShvcmRlciwgZmFjdG9yKQoKZmFjdG9yc19zMV9ibGFuazEgPC0gZmFjdG9yc19zMV9sb25nICU+JQogIG11dGF0ZShsb2FkaW5nID0gcmVwKDEwMCwgbGVuZ3RoKGZhY3RvcnNfczFfbG9uZyRsb2FkaW5nKSkpCiMgZmFjdG9yc19zMV9ibGFuazIgPC0gZmFjdG9yc19zMV9sb25nICU+JQojICAgbXV0YXRlKGxvYWRpbmcgPSBpZmVsc2UoZmFjdG9yID09ICJGMSIsIGxvYWRpbmcsIHJlcCgxMDAsIGxlbmd0aChmYWN0b3JzX3MxX2xvbmckbG9hZGluZykqMi8zKSkpCmZhY3RvcnNfczFfYmxhbmsyIDwtIGZhY3RvcnNfczFfbG9uZyAlPiUKICBtdXRhdGUobG9hZGluZyA9IGlmZWxzZShmYWN0b3IgPT0gIkYyIiwgbG9hZGluZywgcmVwKDEwMCwgbGVuZ3RoKGZhY3RvcnNfczFfbG9uZyRsb2FkaW5nKSoyLzMpKSkKZmFjdG9yc19zMV9ibGFuazMgPC0gZmFjdG9yc19zMV9sb25nICU+JQogIG11dGF0ZShsb2FkaW5nID0gaWZlbHNlKGZhY3RvciAhPSAiRjMiLCBsb2FkaW5nLCByZXAoMTAwLCBsZW5ndGgoZmFjdG9yc19zMV9sb25nJGxvYWRpbmcpKjEvMykpKQoKIyBnZ3Bsb3QoZmFjdG9yc19zMV9ibGFuazEsIGFlcyh4ID0gZmFjdG9yLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhvcmRlcikpLCBmaWxsID0gbG9hZGluZykpICsKIyAgIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKIyAgICMgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChsb2FkaW5nLCAyKSwgbnNtYWxsID0gMikpKSArCiMgICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpLCBicmVha3MgPSBjKC0xLCAwLCAxKSwKIyAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIodGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcmhlaWdodCA9IDIwKSkgKwojICAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiMgICB0aGVtZV9taW5pbWFsKCkgKwojICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpLAojICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKIyAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKSAjIDEwMDAgYnkgMTAwMAojIAojIGdncGxvdChmYWN0b3JzX3MxX2JsYW5rMiwgYWVzKHggPSBmYWN0b3IsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2Mob3JkZXIpKSwgZmlsbCA9IGxvYWRpbmcpKSArCiMgICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiMgICAjIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobG9hZGluZywgMiksIG5zbWFsbCA9IDIpKSkgKwojICAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSwgYnJlYWtzID0gYygtMSwgMCwgMSksCiMgICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJoZWlnaHQgPSAyMCkpICsKIyAgIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwojICAgdGhlbWVfbWluaW1hbCgpICsKIyAgIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKIyAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiMgICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSkgIyAxMDAwIGJ5IDEwMDAKIyAKIyBnZ3Bsb3QoZmFjdG9yc19zMV9ibGFuazMsIGFlcyh4ID0gZmFjdG9yLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKG9yZGVyKSksIGZpbGwgPSBsb2FkaW5nKSkgKwojICAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwojICAgIyBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKGxvYWRpbmcsIDIpLCBuc21hbGwgPSAyKSkpICsKIyAgIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSksIGJyZWFrcyA9IGMoLTEsIDAsIDEpLAojICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcih0aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMjApKSArCiMgICBzY2FsZV94X2Rpc2NyZXRlKHBvc2l0aW9uID0gInRvcCIpICsKIyAgIHRoZW1lX21pbmltYWwoKSArCiMgICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiMgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAojICAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkpICMgMTAwMCBieSAxMDAwCgpnZ3Bsb3QoZmFjdG9yc19zMV9sb25nLCBhZXMoeCA9IGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKG9yZGVyKSksIGZpbGwgPSBsb2FkaW5nKSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKGxvYWRpbmcsIDIpLCBuc21hbGwgPSAyKSksIHNpemUgPSA2KSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSwgYnJlYWtzID0gYygtMSwgMCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcih0aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcmhlaWdodCA9IDIwKSkgKwogIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwogICMgZ2VvbV9yZWN0KGFlcyh4bWluID0gMC41MSwgeG1heCA9IDEuNDksIHltaW4gPSAxNC41NSwgeW1heCA9IDIwLjQ1KSwKICAjICAgICAgICAgICBhbHBoYSA9IDAsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IC41KSArCiAgIyBnZW9tX3JlY3QoYWVzKHhtaW4gPSAxLjUxLCB4bWF4ID0gMi40OSwgeW1pbiA9IDYuNTUsIHltYXggPSAxNC40NSksCiAgIyAgICAgICAgICAgYWxwaGEgPSAwLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAuNSkgKwogICMgZ2VvbV9yZWN0KGFlcyh4bWluID0gMi41MSwgeG1heCA9IDMuNDksIHltaW4gPSAwLjU1LCB5bWF4ID0gNi40NSksCiAgIyAgICAgICAgICAgYWxwaGEgPSAwLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAuNSkgKwogICMgdGhlbWVfYncoKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkpICMgMTAwMCBieSAxMDAwCmBgYAoKIyMjIFN0dWR5IDIgKDctOXkpCgpgYGB7ciBmaWd1cmUgaGVhdG1hcCBzMiwgZmlnLndpZHRoID0gNywgZmlnLmhlaWdodCA9IDd9CmZhY3RvcnNfczIgPC0gZmEuc29ydChmYShkMl9hbGwsIG5mYWN0b3JzID0gMywgY29yID0gY2hvc2VuQ29yVHlwZSwgcm90YXRlID0gY2hvc2VuUm90VHlwZSkkbG9hZGluZ3NbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiaXRlbSIpICU+JQogIGZ1bGxfam9pbih3b3JkaW5nX3MyKSAlPiUKICBzZWxlY3Qod29yZGluZywgTVIxLCBNUjIsIE1SMykgJT4lCiAgcmVuYW1lKGNhcGFjaXR5ID0gd29yZGluZywgRmFjdG9yMSA9IE1SMSwgRmFjdG9yMiA9IE1SMiwgRmFjdG9yMyA9IE1SMykgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJvcmRlciIpICU+JQogIG11dGF0ZShvcmRlciA9IGFzLm51bWVyaWMob3JkZXIpKQoKZmFjdG9yc19zMl9sb25nIDwtIGZhY3RvcnNfczIgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5LCAtb3JkZXIpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZ3N1YigiRmFjdG9yIiwgIkYiLCBmYWN0b3IpKSkgJT4lCiAgIyBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGdzdWIoIkZhY3RvciIsICJGIiwgZmFjdG9yKSwKICAjICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiRjEiLCAiRjMiLCAiRjIiKSkpICU+JQogICMgbXV0YXRlKGZhY3RvciA9IGZhY3Rvcihnc3ViKCJGYWN0b3IiLCAiRiIsIGZhY3RvciksCiAgIyAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkYyIiwgIkYxIiwgIkYzIikpKSAlPiUKICBhcnJhbmdlKG9yZGVyLCBmYWN0b3IpCgpmYWN0b3JzX3MyX2JsYW5rMSA8LSBmYWN0b3JzX3MyX2xvbmcgJT4lCiAgbXV0YXRlKGxvYWRpbmcgPSByZXAoMTAwLCBsZW5ndGgoZmFjdG9yc19zMl9sb25nJGxvYWRpbmcpKSkKZmFjdG9yc19zMl9ibGFuazIgPC0gZmFjdG9yc19zMl9sb25nICU+JQogIG11dGF0ZShsb2FkaW5nID0gaWZlbHNlKGZhY3RvciA9PSAiRjEiLCBsb2FkaW5nLCByZXAoMTAwLCBsZW5ndGgoZmFjdG9yc19zMl9sb25nJGxvYWRpbmcpKjIvMykpKQojIGZhY3RvcnNfczJfYmxhbmsyIDwtIGZhY3RvcnNfczJfbG9uZyAlPiUKIyAgIG11dGF0ZShsb2FkaW5nID0gaWZlbHNlKGZhY3RvciA9PSAiRjIiLCBsb2FkaW5nLCByZXAoMTAwLCBsZW5ndGgoZmFjdG9yc19zMl9sb25nJGxvYWRpbmcpKjIvMykpKQpmYWN0b3JzX3MyX2JsYW5rMyA8LSBmYWN0b3JzX3MyX2xvbmcgJT4lCiAgbXV0YXRlKGxvYWRpbmcgPSBpZmVsc2UoZmFjdG9yICE9ICJGMyIsIGxvYWRpbmcsIHJlcCgxMDAsIGxlbmd0aChmYWN0b3JzX3MyX2xvbmckbG9hZGluZykqMS8zKSkpCgojIGdncGxvdChmYWN0b3JzX3MyX2JsYW5rMSwgYWVzKHggPSBmYWN0b3IsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKG9yZGVyKSksIGZpbGwgPSBsb2FkaW5nKSkgKwojICAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwojICAgIyBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKGxvYWRpbmcsIDIpLCBuc21hbGwgPSAyKSkpICsKIyAgIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSksIGJyZWFrcyA9IGMoLTEsIDAsIDEpLAojICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcih0aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMjApKSArCiMgICBzY2FsZV94X2Rpc2NyZXRlKHBvc2l0aW9uID0gInRvcCIpICsKIyAgIHRoZW1lX21pbmltYWwoKSArCiMgICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiMgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAojICAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkpICMgMTAwMCBieSAxMDAwCiMgCiMgZ2dwbG90KGZhY3RvcnNfczJfYmxhbmsyLCBhZXMoeCA9IGZhY3RvciwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhvcmRlcikpLCBmaWxsID0gbG9hZGluZykpICsKIyAgIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKIyAgICMgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChsb2FkaW5nLCAyKSwgbnNtYWxsID0gMikpKSArCiMgICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpLCBicmVha3MgPSBjKC0xLCAwLCAxKSwKIyAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIodGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcmhlaWdodCA9IDIwKSkgKwojICAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiMgICB0aGVtZV9taW5pbWFsKCkgKwojICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpLAojICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKIyAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKSAjIDEwMDAgYnkgMTAwMAojIAojIGdncGxvdChmYWN0b3JzX3MyX2JsYW5rMywgYWVzKHggPSBmYWN0b3IsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2Mob3JkZXIpKSwgZmlsbCA9IGxvYWRpbmcpKSArCiMgICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiMgICAjIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobG9hZGluZywgMiksIG5zbWFsbCA9IDIpKSkgKwojICAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSwgYnJlYWtzID0gYygtMSwgMCwgMSksCiMgICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJoZWlnaHQgPSAyMCkpICsKIyAgIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwojICAgdGhlbWVfbWluaW1hbCgpICsKIyAgIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKIyAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiMgICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSkgIyAxMDAwIGJ5IDEwMDAKCmdncGxvdChmYWN0b3JzX3MyX2xvbmcsIGFlcyh4ID0gZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2Mob3JkZXIpKSwgZmlsbCA9IGxvYWRpbmcpKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobG9hZGluZywgMiksIG5zbWFsbCA9IDIpKSwgc2l6ZSA9IDYpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpLCBicmVha3MgPSBjKC0xLCAwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMjApKSArCiAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiAgIyBnZW9tX3JlY3QoYWVzKHhtaW4gPSAwLjUxLCB4bWF4ID0gMS40OSwgeW1pbiA9IDE0LjU1LCB5bWF4ID0gMjAuNDUpLAogICMgICAgICAgICAgIGFscGhhID0gMCwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gLjUpICsKICAjIGdlb21fcmVjdChhZXMoeG1pbiA9IDEuNTEsIHhtYXggPSAyLjQ5LCB5bWluID0gNi41NSwgeW1heCA9IDE0LjQ1KSwKICAjICAgICAgICAgICBhbHBoYSA9IDAsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IC41KSArCiAgIyBnZW9tX3JlY3QoYWVzKHhtaW4gPSAyLjUxLCB4bWF4ID0gMy40OSwgeW1pbiA9IDAuNTUsIHltYXggPSA2LjQ1KSwKICAjICAgICAgICAgICBhbHBoYSA9IDAsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IC41KSArCiAgIyB0aGVtZV9idygpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSkgIyAxMDAwIGJ5IDEwMDAKYGBgCgojIyMgU3R1ZHkgMyAoNy05eSkKCmBgYHtyIGZpZ3VyZSBoZWF0bWFwIHMzLCBmaWcud2lkdGggPSA1LCBmaWcuaGVpZ2h0ID0gN30KZmFjdG9yc19zMyA8LSBmYS5zb3J0KGZhKGQzX2FsbCwgbmZhY3RvcnMgPSAzLCBjb3IgPSBjaG9zZW5Db3JUeXBlLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlKSRsb2FkaW5nc1tdKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJpdGVtIikgJT4lCiAgbGVmdF9qb2luKHdvcmRpbmdfczMpICU+JQogIHNlbGVjdCh3b3JkaW5nLCBNUjEsIE1SMiwgTVIzKSAlPiUKICByZW5hbWUoY2FwYWNpdHkgPSB3b3JkaW5nLCBGYWN0b3IxID0gTVIxLCBGYWN0b3IyID0gTVIyLCBGYWN0b3IzID0gTVIzKSAlPiUKICByb3duYW1lc190b19jb2x1bW4odmFyID0gIm9yZGVyIikgJT4lCiAgbXV0YXRlKG9yZGVyID0gYXMubnVtZXJpYyhvcmRlcikpCgpmYWN0b3JzX3MzX2xvbmcgPC0gZmFjdG9yc19zMyAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHksIC1vcmRlcikgJT4lCiAgbXV0YXRlKGZhY3RvciA9IGZhY3Rvcihnc3ViKCJGYWN0b3IiLCAiRiIsIGZhY3RvcikpKSAlPiUKICAjIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZ3N1YigiRmFjdG9yIiwgIkYiLCBmYWN0b3IpLAogICMgIyAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkYxIiwgIkYzIiwgIkYyIikpKSAlPiUKICAjIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZ3N1YigiRmFjdG9yIiwgIkYiLCBmYWN0b3IpLAogICMgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJGMiIsICJGMSIsICJGMyIpKSkgJT4lCiAgYXJyYW5nZShvcmRlciwgZmFjdG9yKQoKZmFjdG9yc19zM19ibGFuazEgPC0gZmFjdG9yc19zM19sb25nICU+JQogIG11dGF0ZShsb2FkaW5nID0gcmVwKDEwMCwgbGVuZ3RoKGZhY3RvcnNfczNfbG9uZyRsb2FkaW5nKSkpCiMgZmFjdG9yc19zM19ibGFuazIgPC0gZmFjdG9yc19zM19sb25nICU+JQojICAgbXV0YXRlKGxvYWRpbmcgPSBpZmVsc2UoZmFjdG9yID09ICJGMSIsIGxvYWRpbmcsIHJlcCgxMDAsIGxlbmd0aChmYWN0b3JzX3MzX2xvbmckbG9hZGluZykqMi8zKSkpCmZhY3RvcnNfczNfYmxhbmsyIDwtIGZhY3RvcnNfczNfbG9uZyAlPiUKICBtdXRhdGUobG9hZGluZyA9IGlmZWxzZShmYWN0b3IgPT0gIkYyIiwgbG9hZGluZywgcmVwKDEwMCwgbGVuZ3RoKGZhY3RvcnNfczNfbG9uZyRsb2FkaW5nKSoyLzMpKSkKZmFjdG9yc19zM19ibGFuazMgPC0gZmFjdG9yc19zM19sb25nICU+JQogIG11dGF0ZShsb2FkaW5nID0gaWZlbHNlKGZhY3RvciAhPSAiRjMiLCBsb2FkaW5nLCByZXAoMTAwLCBsZW5ndGgoZmFjdG9yc19zM19sb25nJGxvYWRpbmcpKjEvMykpKQoKIyBnZ3Bsb3QoZmFjdG9yc19zM19ibGFuazEsIGFlcyh4ID0gZmFjdG9yLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhvcmRlcikpLCBmaWxsID0gbG9hZGluZykpICsKIyAgIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKIyAgICMgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChsb2FkaW5nLCAyKSwgbnNtYWxsID0gMikpKSArCiMgICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpLCBicmVha3MgPSBjKC0xLCAwLCAxKSwKIyAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIodGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcmhlaWdodCA9IDIwKSkgKwojICAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiMgICB0aGVtZV9taW5pbWFsKCkgKwojICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpLAojICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKIyAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKSAjIDEwMDAgYnkgMTAwMAojIAojIGdncGxvdChmYWN0b3JzX3MzX2JsYW5rMiwgYWVzKHggPSBmYWN0b3IsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2Mob3JkZXIpKSwgZmlsbCA9IGxvYWRpbmcpKSArCiMgICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiMgICAjIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobG9hZGluZywgMiksIG5zbWFsbCA9IDIpKSkgKwojICAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSwgYnJlYWtzID0gYygtMSwgMCwgMSksCiMgICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJoZWlnaHQgPSAyMCkpICsKIyAgIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwojICAgdGhlbWVfbWluaW1hbCgpICsKIyAgIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKIyAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiMgICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSkgIyAxMDAwIGJ5IDEwMDAKIyAKIyBnZ3Bsb3QoZmFjdG9yc19zM19ibGFuazMsIGFlcyh4ID0gZmFjdG9yLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKG9yZGVyKSksIGZpbGwgPSBsb2FkaW5nKSkgKwojICAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwojICAgIyBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKGxvYWRpbmcsIDIpLCBuc21hbGwgPSAyKSkpICsKIyAgIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSksIGJyZWFrcyA9IGMoLTEsIDAsIDEpLAojICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcih0aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMjApKSArCiMgICBzY2FsZV94X2Rpc2NyZXRlKHBvc2l0aW9uID0gInRvcCIpICsKIyAgIHRoZW1lX21pbmltYWwoKSArCiMgICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiMgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAojICAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkpICMgMTAwMCBieSAxMDAwCgpnZ3Bsb3QoZmFjdG9yc19zM19sb25nLCBhZXMoeCA9IGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKG9yZGVyKSksIGZpbGwgPSBsb2FkaW5nKSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKGxvYWRpbmcsIDIpLCBuc21hbGwgPSAyKSksIHNpemUgPSA2KSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSwgYnJlYWtzID0gYygtMSwgMCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcih0aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcmhlaWdodCA9IDIwKSkgKwogIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwogICMgZ2VvbV9yZWN0KGFlcyh4bWluID0gMC41MSwgeG1heCA9IDEuNDksIHltaW4gPSAxNC41NSwgeW1heCA9IDIwLjQ1KSwKICAjICAgICAgICAgICBhbHBoYSA9IDAsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IC41KSArCiAgIyBnZW9tX3JlY3QoYWVzKHhtaW4gPSAxLjUxLCB4bWF4ID0gMi40OSwgeW1pbiA9IDYuNTUsIHltYXggPSAxNC40NSksCiAgIyAgICAgICAgICAgYWxwaGEgPSAwLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAuNSkgKwogICMgZ2VvbV9yZWN0KGFlcyh4bWluID0gMi41MSwgeG1heCA9IDMuNDksIHltaW4gPSAwLjU1LCB5bWF4ID0gNi40NSksCiAgIyAgICAgICAgICAgYWxwaGEgPSAwLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAuNSkgKwogICMgdGhlbWVfYncoKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkpICMgMTAwMCBieSAxMDAwCmBgYAoKIyMjIFN0dWR5IDQgKDQtNnkpCigzIGZhY3RvcnMgYnkgZm9yY2UpCgpgYGB7ciBmaWd1cmUgaGVhdG1hcCBzNCwgZmlnLndpZHRoID0gNSwgZmlnLmhlaWdodCA9IDd9CmZhY3RvcnNfczQgPC0gZmEuc29ydChmYShkNF9hbGwsIG5mYWN0b3JzID0gMywgY29yID0gY2hvc2VuQ29yVHlwZSwgcm90YXRlID0gY2hvc2VuUm90VHlwZSkkbG9hZGluZ3NbXSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiaXRlbSIpICU+JQogIGxlZnRfam9pbih3b3JkaW5nX3M0KSAlPiUKICBzZWxlY3Qod29yZGluZywgTVIxLCBNUjIsIE1SMykgJT4lCiAgcmVuYW1lKGNhcGFjaXR5ID0gd29yZGluZywgRmFjdG9yMSA9IE1SMSwgRmFjdG9yMiA9IE1SMiwgRmFjdG9yMyA9IE1SMykgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJvcmRlciIpICU+JQogIG11dGF0ZShvcmRlciA9IGFzLm51bWVyaWMob3JkZXIpKQoKZmFjdG9yc19zNF9sb25nIDwtIGZhY3RvcnNfczQgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5LCAtb3JkZXIpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZ3N1YigiRmFjdG9yIiwgIkYiLCBmYWN0b3IpKSkgJT4lCiAgIyBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGdzdWIoIkZhY3RvciIsICJGIiwgZmFjdG9yKSwKICAjICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiRjEiLCAiRjMiLCAiRjIiKSkpICU+JQogICMgbXV0YXRlKGZhY3RvciA9IGZhY3Rvcihnc3ViKCJGYWN0b3IiLCAiRiIsIGZhY3RvciksCiAgIyAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkYyIiwgIkYxIiwgIkYzIikpKSAlPiUKICBhcnJhbmdlKG9yZGVyLCBmYWN0b3IpCgpmYWN0b3JzX3M0X2JsYW5rMSA8LSBmYWN0b3JzX3M0X2xvbmcgJT4lCiAgbXV0YXRlKGxvYWRpbmcgPSByZXAoMTAwLCBsZW5ndGgoZmFjdG9yc19zNF9sb25nJGxvYWRpbmcpKSkKIyBmYWN0b3JzX3M0X2JsYW5rMiA8LSBmYWN0b3JzX3M0X2xvbmcgJT4lCiMgICBtdXRhdGUobG9hZGluZyA9IGlmZWxzZShmYWN0b3IgPT0gIkYxIiwgbG9hZGluZywgcmVwKDEwMCwgbGVuZ3RoKGZhY3RvcnNfczRfbG9uZyRsb2FkaW5nKSoyLzMpKSkKZmFjdG9yc19zNF9ibGFuazIgPC0gZmFjdG9yc19zNF9sb25nICU+JQogIG11dGF0ZShsb2FkaW5nID0gaWZlbHNlKGZhY3RvciA9PSAiRjIiLCBsb2FkaW5nLCByZXAoMTAwLCBsZW5ndGgoZmFjdG9yc19zNF9sb25nJGxvYWRpbmcpKjIvMykpKQpmYWN0b3JzX3M0X2JsYW5rMyA8LSBmYWN0b3JzX3M0X2xvbmcgJT4lCiAgbXV0YXRlKGxvYWRpbmcgPSBpZmVsc2UoZmFjdG9yICE9ICJGMyIsIGxvYWRpbmcsIHJlcCgxMDAsIGxlbmd0aChmYWN0b3JzX3M0X2xvbmckbG9hZGluZykqMS8zKSkpCgojIGdncGxvdChmYWN0b3JzX3M0X2JsYW5rMSwgYWVzKHggPSBmYWN0b3IsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSByZW9yZGVyKGNhcGFjaXR5LCBkZXNjKG9yZGVyKSksIGZpbGwgPSBsb2FkaW5nKSkgKwojICAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwojICAgIyBnZW9tX3RleHQoYWVzKGxhYmVsID0gZm9ybWF0KHJvdW5kKGxvYWRpbmcsIDIpLCBuc21hbGwgPSAyKSkpICsKIyAgIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgbGltaXRzID0gYygtMSwgMSksIGJyZWFrcyA9IGMoLTEsIDAsIDEpLAojICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcih0aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMjApKSArCiMgICBzY2FsZV94X2Rpc2NyZXRlKHBvc2l0aW9uID0gInRvcCIpICsKIyAgIHRoZW1lX21pbmltYWwoKSArCiMgICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiMgICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAojICAgICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKIyAgICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkpICMgMTAwMCBieSAxMDAwCiMgCiMgZ2dwbG90KGZhY3RvcnNfczRfYmxhbmsyLCBhZXMoeCA9IGZhY3RvciwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhvcmRlcikpLCBmaWxsID0gbG9hZGluZykpICsKIyAgIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKIyAgICMgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZvcm1hdChyb3VuZChsb2FkaW5nLCAyKSwgbnNtYWxsID0gMikpKSArCiMgICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpLCBicmVha3MgPSBjKC0xLCAwLCAxKSwKIyAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIodGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcmhlaWdodCA9IDIwKSkgKwojICAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiMgICB0aGVtZV9taW5pbWFsKCkgKwojICAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpLAojICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKIyAgICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiMgICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKSAjIDEwMDAgYnkgMTAwMAojIAojIGdncGxvdChmYWN0b3JzX3M0X2JsYW5rMywgYWVzKHggPSBmYWN0b3IsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2Mob3JkZXIpKSwgZmlsbCA9IGxvYWRpbmcpKSArCiMgICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiMgICAjIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobG9hZGluZywgMiksIG5zbWFsbCA9IDIpKSkgKwojICAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSwgYnJlYWtzID0gYygtMSwgMCwgMSksCiMgICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJoZWlnaHQgPSAyMCkpICsKIyAgIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwojICAgdGhlbWVfbWluaW1hbCgpICsKIyAgIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKIyAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiMgICAgICAgICBheGlzLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAojICAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSkgIyAxMDAwIGJ5IDEwMDAKCmdncGxvdChmYWN0b3JzX3M0X2xvbmcsIGFlcyh4ID0gZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2Mob3JkZXIpKSwgZmlsbCA9IGxvYWRpbmcpKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmb3JtYXQocm91bmQobG9hZGluZywgMiksIG5zbWFsbCA9IDIpKSwgc2l6ZSA9IDYpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIGxpbWl0cyA9IGMoLTEsIDEpLCBicmVha3MgPSBjKC0xLCAwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMjApKSArCiAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiAgIyBnZW9tX3JlY3QoYWVzKHhtaW4gPSAwLjUxLCB4bWF4ID0gMS40OSwgeW1pbiA9IDE0LjU1LCB5bWF4ID0gMjAuNDUpLAogICMgICAgICAgICAgIGFscGhhID0gMCwgY29sb3IgPSAiYmxhY2siLCBzaXplID0gLjUpICsKICAjIGdlb21fcmVjdChhZXMoeG1pbiA9IDEuNTEsIHhtYXggPSAyLjQ5LCB5bWluID0gNi41NSwgeW1heCA9IDE0LjQ1KSwKICAjICAgICAgICAgICBhbHBoYSA9IDAsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IC41KSArCiAgIyBnZW9tX3JlY3QoYWVzKHhtaW4gPSAyLjUxLCB4bWF4ID0gMy40OSwgeW1pbiA9IDAuNTUsIHltYXggPSA2LjQ1KSwKICAjICAgICAgICAgICBhbHBoYSA9IDAsIGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IC41KSArCiAgIyB0aGVtZV9idygpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAogICAgICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSkgIyAxMDAwIGJ5IDEwMDAKYGBgCgojIyBNZWFuIHJhdGluZ3MKCiMjIyBTdHVkaWVzIDEtMgoKTWVhbiByYXRpbmdzIG9mIDQwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciB0aGUgMiBlbnRpdGllcyBpbmNsdWRlZCBpbiBTdHVkaWVzIDEtMi4gUGFydGljaXBhbnRzIHJlc3BvbmRlZCBvbiBhIDMtcG9pbnQgc2NhbGUgKDAgPSAibm8iLCAwLjUgPSAia2luZGEiLCAxID0gInllcyIpLiBFcnJvciBiYXJzIGFyZSBub25wYXJhbWV0cmljIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1lbnRhbCBjYXBhY2l0aWVzIGFyZSBncm91cGVkIGFjY29yZGluZyB0byB0aGVpciBkb21pbmFudCBmYWN0b3IgbG9hZGluZyBpbiBTdHVkeSAxIChhZHVsdHMpLgoKYGBge3IgZmlndXJlIG1lYW4gcmF0aW5ncyBzMS1zMiwgZmlnLndpZHRoID0gMywgZmlnLmhlaWdodCA9IDN9CiMgbWFrZSBkYXRhZnJhbWUKczEyX3Bsb3R0aW5nIDwtIGNoYXJfcGxvdHRpbmcgJT4lCiAgZmlsdGVyKHN0dWR5ICVpbiUgYygic3R1ZHkgMSIsICJzdHVkeSAyIikpICU+JQogIGRpc3RpbmN0KCkKCiMgcGxvdCEgKG9yZGVyZWQgYnkgc3R1ZHkgMyBmYWN0b3IgbG9hZGluZ3MpCnMxMiA8LSBnZ3Bsb3QoczEyX3Bsb3R0aW5nLAogICAgICAgICAgICAgICBhZXMoeSA9IHN1bW1hcnlfbWVhbl9uYSwgeCA9IHJlb3JkZXIod29yZGluZywgZGVzYyhzMV9vcmRlcikpLAogICAgICAgICAgICAgICAgICAgY29sb3VyID0gZmFjdG9yKHMxX2NvbG9yKSwgc2hhcGUgPSBzdHVkeSkpICsKICBnZW9tX3BvaW50KHN0YXQgPSAiaWRlbnRpdHkiLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC42KSwgc2l6ZSA9IDIpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gc3VtbWFyeV9jaV9sb3dlcl9uYSwgeW1heCA9IHN1bW1hcnlfY2lfdXBwZXJfbmEpLCB3aWR0aCA9IDAuNCwKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjYpKSArCiAgZmFjZXRfd3JhcCh+IGNoYXJhY3RlcikgKwogIHRoZW1lX2J3KCkgKwogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlxuTWVhbiByYXRpbmciLAogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDAsIDEpLAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDAuNSwgMSksCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjBcbihubykiLCAiMC41XG4oa2luZGEpIiwgIjFcbih5ZXMpIikpICsKICBzY2FsZV9zaGFwZV9kaXNjcmV0ZShuYW1lID0gIlN0dWR5OiIsCiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU3R1ZHkgMTogYWR1bHRzIiwgIlN0dWR5IDI6IDctOXkiKSkgKwogICMgc2NhbGVfY29sb3VyX2JyZXdlcihuYW1lID0gIkZhY3RvcjoiLAogICMgICAgICAgICAgICAgICAgICAgICB0eXBlID0gInF1YWwiLCBwYWxldHRlID0gNiwKICAjICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBGQUxTRSkgKwogIHNjYWxlX2NvbG91cl9tYW51YWwobmFtZSA9ICJGYWN0b3I6IiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiNFNDFBMUMiLCAiIzREQUY0QSIsICIjMzc3RUI4IiksCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJCT0RZIiwgIk1JTkQiLCAiSEVBUlQiKSkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gOSksCiAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJpdGFsaWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSBwYWxldHRlX3MxKSwKICAgICAgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikKCnMxMgpgYGAKCiMjIyBTdHVkaWVzIDMtNAoKTWVhbiByYXRpbmdzIG9mIDIwIG1lbnRhbCBjYXBhY2l0aWVzIGZvciB0aGUgOSBlbnRpdGllcyBpbmNsdWRlZCBpbiBTdHVkaWVzIDMtNC4gUGFydGljaXBhbnRzIHJlc3BvbmRlZCBvbiBhIDMtcG9pbnQgc2NhbGUgKDAgPSAibm8iLCAwLjUgPSAia2luZGEiLCAxID0gInllcyIpLiBFcnJvciBiYXJzIGFyZSBub25wYXJhbWV0cmljIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMuIE1lbnRhbCBjYXBhY2l0aWVzIGFyZSBncm91cGVkIGFjY29yZGluZyB0byB0aGVpciBkb21pbmFudCBmYWN0b3IgbG9hZGluZyBpbiBTdHVkeSAzICg3LTl5KS4KCmBgYHtyIGZpZ3VyZSBtZWFuIHJhdGluZ3MgczMtczQsIGZpZy53aWR0aCA9IDUsIGZpZy5oZWlnaHQgPSAzfQojIG1ha2UgZGF0YWZyYW1lCnMzNF9wbG90dGluZyA8LSBjaGFyX3Bsb3R0aW5nICU+JQogIGZpbHRlcihzdHVkeSAlaW4lIGMoInN0dWR5IDMiLCAic3R1ZHkgNCIpLAogICAgICAgICAhaXMubmEoczNfb3JkZXIpLCAhaXMubmEoY2hhcmFjdGVyKSwgIWlzLm5hKGNhcGFjaXR5KSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgImRvbGwiLCAidGVkZHlfYmVhciIsICJyb2JvdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgImJpcmQiLCAibW91c2UiLCAiZ29hdCIsICJlbGVwaGFudCIpKSkKCiMgcGxvdCEgKG9yZGVyZWQgYnkgc3R1ZHkgMyBmYWN0b3IgbG9hZGluZ3MpCnMzNCA8LSBnZ3Bsb3QoczM0X3Bsb3R0aW5nLAogICAgICAgICAgICAgICBhZXMoeSA9IHN1bW1hcnlfbWVhbl9uYSwgeCA9IHJlb3JkZXIod29yZGluZywgZGVzYyhzM19vcmRlcikpLCAKICAgICAgICAgICAgICAgICAgICMgY29sb3VyID0gc3R1ZHksCiAgICAgICAgICAgICAgICAgICBjb2xvdXIgPSBzM19jb2xvciwKICAgICAgICAgICAgICAgICAgIHNoYXBlID0gc3R1ZHkpKSArCiAgZ2VvbV9wb2ludChzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNiksIHNpemUgPSAyKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHN1bW1hcnlfY2lfbG93ZXJfbmEsIHltYXggPSBzdW1tYXJ5X2NpX3VwcGVyX25hKSwgd2lkdGggPSAwLjQsCiAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC42KSkgKwogIGZhY2V0X3dyYXAofiBjaGFyYWN0ZXIsIG5jb2wgPSA5KSArCiAgdGhlbWVfYncoKSArCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiXG5NZWFuIHJhdGluZyIsCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMCwgMC41LCAxKSwKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiMFxuKG5vKSIsICIwLjVcbihraW5kYSkiLCAiMVxuKHllcykiKSkgKwogIHNjYWxlX3NoYXBlX2Rpc2NyZXRlKG5hbWUgPSAiU3R1ZHk6IiwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTdHVkeSAzOiA3LTl5IiwgIlN0dWR5IDQ6IDQtNnkiKSkgKwogICMgc2NhbGVfY29sb3VyX2Rpc2NyZXRlKG5hbWUgPSAiU3R1ZHk6IiwKICAjICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlN0dWR5IDM6IDctOXkiLCAiU3R1ZHkgNDogNC02eSIpKSArCiAgIyBzY2FsZV9jb2xvdXJfYnJld2VyKG5hbWUgPSAiRmFjdG9yOiIsCiAgIyAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAicXVhbCIsIHBhbGV0dGUgPSA2LAogICMgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IEZBTFNFKSArCiAgc2NhbGVfY29sb3VyX21hbnVhbChuYW1lID0gIkZhY3RvcjoiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiI0U0MUExQyIsICIjMzc3RUI4IiwgIiM0REFGNEEiKSwKICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkiLCAiSEVBUlQiLCAiTUlORCIpKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSwKICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChmYWNlID0gIml0YWxpYyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbG91ciA9IHBhbGV0dGVfczEpLAogICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLAogICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikKCnMzNApgYGAKCiMgTWVhbiBmYWN0b3Igc2NvcmVzCgojIyBTdHVkaWVzIDEtMgoKYGBge3IgczEyIGFsbCBubyByb3RhdGlvbiwgaW5jbHVkZSA9IEZ9CiMgbWFrZSBjb21iaW5lZCBkYXRhc2V0CmQxMl9hbGwgPC0gZDFfYWxsICU+JSByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgZnVsbF9qb2luKGQyX2FsbCAlPiUgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoInN1YmlkIikKCiMgZXhhbWluZSBzY3JlZSBwbG90CmZhLnBhcmFsbGVsKGQxMl9hbGwpCgojIHJ1biBFRkEgd2l0aG91dCByb3RhdGlvbiB3aXRoIE4gZmFjdG9ycwplZmFfZDEyX2FsbF91bnJvdGF0ZWQgPC0gZmEoZDEyX2FsbCwgMTMsIHJvdGF0ZSA9ICJub25lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKcHJpbnQoZWZhX2QxMl9hbGxfdW5yb3RhdGVkKQoKIyBleGFtaW5lIGVpZ2VudmFsdWVzIGFuZCB2YXJpYW5jZSBleHBsYWluZWQKZWZhX2QxMl9hbGxfdW5yb3RhdGVkX2VpZ2VudmFsdWVzIDwtIHByaW50KGVmYV9kMTJfYWxsX3Vucm90YXRlZCkkVmFjY291bnRlZCAlPiUKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpCgojIGNvdW50IGZhY3RvcnMgd2l0aCBlaWdlbnZhbHVlcyA+IDEgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZCA+IDUlCmVmYV9kMTJfYWxsX3Vucm90YXRlZF9uZmFjdG9ycyA8LSBlZmFfZDEyX2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgJT4lCiAgZmlsdGVyKFNTLmxvYWRpbmdzID4gMSwgUHJvcG9ydGlvbi5FeHBsYWluZWQgPiAwLjA1KSAlPiUKICBjb3VudCgpICU+JQogIGFzLm51bWVyaWMoKQplZmFfZDEyX2FsbF91bnJvdGF0ZWRfbmZhY3RvcnMKYGBgCgpgYGB7ciBzMTIgYWxsIHJvdGF0aW9uLCBpbmNsdWRlID0gRn0KZWZhX2QxMl9hbGxfcm90YXRlZF9tYXggPC0gZmEoZDEyX2FsbCwgMTMsIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIpCgplZmFfZDEyX2FsbF9yb3RhdGVkIDwtIGZhKGQxMl9hbGwsIGVmYV9kMTJfYWxsX3Vucm90YXRlZF9uZmFjdG9ycywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCiMgY2hlY2sgdGhhdCBlYWNoIG9mIHRoZXNlIGZhY3RvcnMgaXMgdGhlIGRvbWluYW50IGZhY3RvciBmb3IgYXQgbGVhc3Qgb25lIG1lbnRhbCBjYXBhY2l0eSBpdGVtCmVmYV9kMTJfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgPC0gZmEuc29ydChsb2FkaW5ncyhlZmFfZDEyX2FsbF9yb3RhdGVkKVtdKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgbXV0YXRlKGxvYWRpbmdfYWJzID0gYWJzKGxvYWRpbmcpKSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgbG9hZGluZ19hYnMpICU+JQogIHVuZ3JvdXAoKQplZmFfZDEyX2FsbF9yb3RhdGVkX2xvYWRpbmdzCgojIGRyb3AgYW55IGZhY3RvcnMgd2hlcmUgbiA8IDEKZWZhX2QxMl9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKQoKIyBzZXQgbnVtYmVyIG9mIGZhY3RvcnMgdG8gZXh0cmFjdApuZmFjdG9yc19kMTJfYWxsIDwtIGVmYV9kMTJfYWxsX3JvdGF0ZWRfbG9hZGluZ3MgJT4lIAogIGNvdW50KGZhY3RvcikgJT4lIAogIGZpbHRlcihuID4gMCkgJT4lCiAgbnJvdygpCm5mYWN0b3JzX2QxMl9hbGwKYGBgCgpgYGB7ciBzMTIgYWxsIHZhcmltYXggcm90YXRpb24sIGluY2x1ZGUgPSBGfQojIHJ1biBFRkEgd2l0aCByb3RhdGlvbiB3aXRoIE4gZmFjdG9ycwplZmFfZDEyX2FsbF9yb3RhdGVkTiA8LSBmYShkMTJfYWxsLCBuZmFjdG9yc19kMTJfYWxsLCAKICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLCBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3JlcyA9ICJ0ZW5CZXJnZSIsIG1pc3NpbmcgPSBUUlVFKSAjIGltcHV0ZSBtaXNzaW5nIHZhbHVlcwpwcmludChlZmFfZDEyX2FsbF9yb3RhdGVkTikKCiMgZ2V0IGxvYWRpbmdzIGZvciBlYWNoIGZhY3RvcgplZmFfZDEyX2FsbF9yb3RhdGVkTl9sb2FkaW5ncyA8LSBsb2FkaW5ncyhlZmFfZDEyX2FsbF9yb3RhdGVkTilbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbih2YXIgPSAiY2FwYWNpdHkiKQpgYGAKCmBgYHtyIHMxMiBsb2FkaW5ncyB0YWJsZSwgaW5jbHVkZSA9IEZ9CmRhdGEuZnJhbWUobG9hZGluZ3MoZmEuc29ydChlZmFfZDEyX2FsbF9yb3RhdGVkTikpW10pICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBtdXRhdGVfYXQodmFycyhzdGFydHNfd2l0aCgiTSIpKSwgZnVucyhyb3VuZDIpKQpgYGAKCmBgYHtyIHMxMiBmaWd1cmUgc2V0dXAsIGluY2x1ZGUgPSBGfQpzY29yZXNfczEyX3Bsb3R0aW5nIDwtIGQxICU+JSAKICBzZWxlY3Qoc3ViaWQsIGFnZV9ncm91cCwgY2hhcmFjdGVyKSAlPiUgCiAgZGlzdGluY3QoKSAlPiUgCiAgbXV0YXRlKHN1YmlkID0gcGFzdGUoY2hhcmFjdGVyLCBzdWJpZCwgc2VwID0gIl8iKSkgJT4lCiAgZnVsbF9qb2luKGQyICU+JSAKICAgICAgICAgICAgICBzZWxlY3Qoc3ViaWQsIGFnZV9ncm91cCwgY2hhcmFjdGVyKSAlPiUgCiAgICAgICAgICAgICAgZGlzdGluY3QoKSAlPiUgCiAgICAgICAgICAgICAgbXV0YXRlKHN1YmlkID0gcGFzdGUoY2hhcmFjdGVyLCBzdWJpZCwgc2VwID0gIl8iKSkpICU+JQogIGZ1bGxfam9pbihlZmFfZDEyX2FsbF9yb3RhdGVkTiRzY29yZXMgJT4lIAogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUgCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIHJlbmFtZShzY29yZV9GMSA9IE1SMSwgc2NvcmVfRjIgPSBNUjIsIHNjb3JlX0YzID0gTVIzKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHNjb3JlX0YxKSwgIWlzLm5hKHNjb3JlX0YyKSwgIWlzLm5hKHNjb3JlX0YzKSwgIWlzLm5hKGFnZV9ncm91cCkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkgJT4lCiAgbXVsdGlfYm9vdChjb2x1bW4gPSAic2NvcmUiLAogICAgICAgICAgICAgc3VtbWFyeV9ncm91cHMgPSBjKCJhZ2VfZ3JvdXAiLCAiY2hhcmFjdGVyIiwgImZhY3RvciIpLAogICAgICAgICAgICAgc3RhdGlzdGljc19mdW5jdGlvbnMgPSBjKCJtZWFuIiwgImNpX2xvd2VyIiwgImNpX3VwcGVyIikpCmBgYAoKYGBge3IgczEyIHJlZ3Jlc3Npb259CnRlbXBDIDwtIGQxICU+JSBtdXRhdGUoc3ViaWQgPSBwYXN0ZShjaGFyYWN0ZXIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBmdWxsX2pvaW4oZDIgJT4lIG11dGF0ZShzdWJpZCA9IHBhc3RlKGNoYXJhY3Rlciwgc3ViaWQsIHNlcCA9ICJfIikpKSAlPiUKICBmdWxsX2pvaW4oZGF0YS5mcmFtZShlZmFfZDEyX2FsbF9yb3RhdGVkTiRzY29yZXMpICU+JQogICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIC1zdWJpZCkpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSwKICAgICAgICAgYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCksCiAgICAgICAgIGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIpKSAjICU+JQogICMgZmlsdGVyKCFpcy5uYShmYWN0b3IpLCAhaXMubmEoYWdlX2dyb3VwKSwgIWlzLm5hKGNoYXJhY3RlcikpCgpjb250cmFzdHModGVtcEMkZmFjdG9yKSA9IGNiaW5kKGZhY3RvcjEgPSBjKDEsIC0xLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3IzID0gYygwLCAtMSwgMSkpCgpjb250cmFzdHModGVtcEMkYWdlX2dyb3VwKSA9IGNiaW5kKGNoaWxkcmVuID0gYygtMSwgMSkpCmNvbnRyYXN0cyh0ZW1wQyRjaGFyYWN0ZXIpID0gY2JpbmQocm9ib3QgPSBjKC0xLCAxKSkKCmxpYnJhcnkobG1lNCkKcjEgPC0gbG1lcihzY29yZSB+IGNoYXJhY3RlciAqIGZhY3RvciAqIGFnZV9ncm91cCArICgxIHwgc3ViaWQpICwgdGVtcEMpCnN1bW1hcnkocjEpCgojIGxpYnJhcnkoYnJtcykKIyByMWIgPC0gYnJtKHNjb3JlIH4gY2hhcmFjdGVyICogZmFjdG9yICogYWdlX2dyb3VwICsgKDEgfCBzdWJpZCkgLCB0ZW1wQywKIyAgICAgICAgICAgICBmYW1pbHkgPSAiZ2F1c3NpYW4iKQojIHN1bW1hcnkocjFiKQpgYGAKCmBgYHtyIHMxMiBmaWd1cmUgZmFjdG9yIHNjb3JlcyBieSBhZ2UgZ3JvdXAsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSAzfQojIHBsb3QKZ2dwbG90KHNjb3Jlc19zMTJfcGxvdHRpbmcgJT4lCiAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgbXV0YXRlKGZhY3RvciA9IGZhY3RvcihmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU29jaWFsLWVtb3Rpb25hbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQm9kaWx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSwKICAgICAgICAgICAgICAgIGFnZV9ncm91cCA9IGZhY3RvcihhZ2VfZ3JvdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxldmVscyA9IGMoImFkdWx0cyIsICJjaGlsZHJlbl83OSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsYWJlbHMgPSBjKCJhZHVsdHMiLCAiY2hpbGRyZW4iKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2hpbGRyZW5fNzkiLCAiYWR1bHRzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJjaGlsZHJlbiIsICJhZHVsdHMiKSkpLAogICAgICAgYWVzKHggPSBhZ2VfZ3JvdXAsIHkgPSBzdW1tYXJ5X21lYW4sIGNvbG9yID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKCJmYWN0b3IiLCBuY29sID0gMykgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDUsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjQpKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHN1bW1hcnlfY2lfbG93ZXIsIHltYXggPSBzdW1tYXJ5X2NpX3VwcGVyKSwKICAgICAgICAgICAgICAgIHdpZHRoID0gMC4yLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC40KSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE5LCAxNSkpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBzY29yZXMgYnkgYWdlIGdyb3VwIiwKICAgICAgICMgc3VidGl0bGUgPSAiQWR1bHRzIChTdHVkeSAxKSB2cy4gY2hpbGRyZW4gKFN0dWR5IDIpXG4iLAogICAgICAgeCA9ICJBZ2UgZ3JvdXAiLAogICAgICAgeSA9ICJNZWFuIGZhY3RvciBzY29yZSIpICMgMTAwMCBieSA1MDAKYGBgCgojIyBTdHVkeSAzCgpgYGB7ciBzMyBmaWd1cmUgc2V0dXAsIGluY2x1ZGUgPSBGfQpzY29yZXNfczNfcGxvdHRpbmcgPC0gZDMgJT4lIAogIHNlbGVjdChzdWJpZCwgYWdlX2dyb3VwLCBjaGFyYWN0ZXIpICU+JSAKICBkaXN0aW5jdCgpICU+JSAKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZShjaGFyYWN0ZXIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBmdWxsX2pvaW4oZWZhX2QzX2FsbF9yb3RhdGVkTiRzY29yZXMgJT4lIAogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUgCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIHJlbmFtZShzY29yZV9GMSA9IE1SMSwgc2NvcmVfRjIgPSBNUjIsIHNjb3JlX0YzID0gTVIzKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHNjb3JlX0YxKSwgIWlzLm5hKHNjb3JlX0YyKSwgIWlzLm5hKHNjb3JlX0YzKSwgIWlzLm5hKGFnZV9ncm91cCkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkgJT4lCiAgbXVsdGlfYm9vdChjb2x1bW4gPSAic2NvcmUiLAogICAgICAgICAgICAgc3VtbWFyeV9ncm91cHMgPSBjKCJhZ2VfZ3JvdXAiLCAiY2hhcmFjdGVyIiwgImZhY3RvciIpLAogICAgICAgICAgICAgc3RhdGlzdGljc19mdW5jdGlvbnMgPSBjKCJtZWFuIiwgImNpX2xvd2VyIiwgImNpX3VwcGVyIikpCmBgYAoKYGBge3IgczMgZmlndXJlIGZhY3RvciBzY29yZXMgYnkgY2hhcmFjdGVyLCBmaWcud2lkdGggPSA2LCBmaWcuaGVpZ2h0ID0gM30KZ2dwbG90KHNjb3Jlc19zM19wbG90dGluZyAlPiUKICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY29tcHV0ZXIiLCAicm9ib3QiLCAiZG9sbCIsICJ0ZWRkeV9iZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWV0bGUiLCAiYmlyZCIsICJtb3VzZSIsICJnb2F0IiwgImVsZXBoYW50IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiY29tcHV0ZXIiLCAicm9ib3QiLCAiZG9sbCIsICJ0ZWRkeSBiZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZWV0bGUiLCAiYmlyZCIsICJtb3VzZSIsICJnb2F0IiwgImVsZXBoYW50IikpLAogICAgICAgICAgICAgICAgZmFjdG9yID0gZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJzY29yZV9GMiIsICJzY29yZV9GMSIsICJzY29yZV9GMyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlNvY2lhbC1lbW90aW9uYWwiLCAiQm9kaWx5IiwgIlBlcmNlcHR1YWwtY29nbml0aXZlIikpKSwKICAgICAgIGFlcyh4ID0gY2hhcmFjdGVyLCB5ID0gc3VtbWFyeV9tZWFuLCBjb2xvciA9IGNoYXJhY3Rlciwgc2hhcGUgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCh+IGZhY3RvciwgbmNvbCA9IDMpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgZ2VvbV9wb2ludChzaXplID0gNSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNCkpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gc3VtbWFyeV9jaV9sb3dlciwgeW1heCA9IHN1bW1hcnlfY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgIHdpZHRoID0gMC4yLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC40KSkgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgIiMwMEJGQzQiLCAiI0Y4NzY2RCIsIHJlcCgiYmxhY2siLCA0KSkpICsKICAjIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE3LCAxNSwgMTksIHJlcCgxNywgNCkpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgIiMwMEJGQzQiLCByZXAoImdyYXkiLCAyKSwgIiNGODc2NkQiLCByZXAoImJsYWNrIiwgNCkpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMTcsIDE1LCByZXAoMTcsIDIpLCAxOSwgcmVwKDE3LCA0KSkpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBzY29yZXMgYnkgY2hhcmFjdGVyIiwKICAgICAgIHggPSAiQ2hhcmFjdGVyIiwKICAgICAgIHkgPSAiTWVhbiBmYWN0b3Igc2NvcmUiKSAjIDEwMDAgYnkgNTAwCmBgYAoKCiMjIFN0dWRpZXMgMy00CgpgYGB7ciBzMzQgYWxsIG5vIHJvdGF0aW9uLCBpbmNsdWRlID0gRn0KIyBtYWtlIGNvbWJpbmVkIGRhdGFzZXQKZDM0X2FsbCA8LSBkM19hbGwgJT4lIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSAlPiUKICBmdWxsX2pvaW4oZDRfYWxsICU+JSByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygic3ViaWQiKQoKIyBleGFtaW5lIHNjcmVlIHBsb3QKZmEucGFyYWxsZWwoZDM0X2FsbCkKCiMgcnVuIEVGQSB3aXRob3V0IHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMzRfYWxsX3Vucm90YXRlZCA8LSBmYShkMzRfYWxsLCAxMywgcm90YXRlID0gIm5vbmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQpwcmludChlZmFfZDM0X2FsbF91bnJvdGF0ZWQpCgojIGV4YW1pbmUgZWlnZW52YWx1ZXMgYW5kIHZhcmlhbmNlIGV4cGxhaW5lZAplZmFfZDM0X2FsbF91bnJvdGF0ZWRfZWlnZW52YWx1ZXMgPC0gcHJpbnQoZWZhX2QzNF9hbGxfdW5yb3RhdGVkKSRWYWNjb3VudGVkICU+JQogIHQoKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY291bnQgZmFjdG9ycyB3aXRoIGVpZ2VudmFsdWVzID4gMSBhbmQgdmFyaWFuY2UgZXhwbGFpbmVkID4gNSUKZWZhX2QzNF9hbGxfdW5yb3RhdGVkX25mYWN0b3JzIDwtIGVmYV9kMzRfYWxsX3Vucm90YXRlZF9laWdlbnZhbHVlcyAlPiUKICBmaWx0ZXIoU1MubG9hZGluZ3MgPiAxLCBQcm9wb3J0aW9uLkV4cGxhaW5lZCA+IDAuMDUpICU+JQogIGNvdW50KCkgJT4lCiAgYXMubnVtZXJpYygpCmVmYV9kMzRfYWxsX3Vucm90YXRlZF9uZmFjdG9ycwpgYGAKCmBgYHtyIHMzNCBhbGwgcm90YXRpb24sIGluY2x1ZGUgPSBGfQplZmFfZDM0X2FsbF9yb3RhdGVkX21heCA8LSBmYShkMzRfYWxsLCAxMywgcm90YXRlID0gY2hvc2VuUm90VHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuQ29yVHlwZSwgZm0gPSAibWlucmVzIikKCmVmYV9kMzRfYWxsX3JvdGF0ZWQgPC0gZmEoZDM0X2FsbCwgZWZhX2QzNF9hbGxfdW5yb3RhdGVkX25mYWN0b3JzLCByb3RhdGUgPSBjaG9zZW5Sb3RUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5Db3JUeXBlLCBmbSA9ICJtaW5yZXMiKQoKIyBjaGVjayB0aGF0IGVhY2ggb2YgdGhlc2UgZmFjdG9ycyBpcyB0aGUgZG9taW5hbnQgZmFjdG9yIGZvciBhdCBsZWFzdCBvbmUgbWVudGFsIGNhcGFjaXR5IGl0ZW0KZWZhX2QzNF9hbGxfcm90YXRlZF9sb2FkaW5ncyA8LSBmYS5zb3J0KGxvYWRpbmdzKGVmYV9kMzRfYWxsX3JvdGF0ZWQpW10pICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBtdXRhdGUobG9hZGluZ19hYnMgPSBhYnMobG9hZGluZykpICU+JQogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUKICB0b3BfbigxLCBsb2FkaW5nX2FicykgJT4lCiAgdW5ncm91cCgpCmVmYV9kMzRfYWxsX3JvdGF0ZWRfbG9hZGluZ3MKCiMgZHJvcCBhbnkgZmFjdG9ycyB3aGVyZSBuIDwgMQplZmFfZDM0X2FsbF9yb3RhdGVkX2xvYWRpbmdzICU+JSAKICBjb3VudChmYWN0b3IpICU+JSAKICBmaWx0ZXIobiA+IDApCgojIHNldCBudW1iZXIgb2YgZmFjdG9ycyB0byBleHRyYWN0Cm5mYWN0b3JzX2QzNF9hbGwgPC0gZWZhX2QzNF9hbGxfcm90YXRlZF9sb2FkaW5ncyAlPiUgCiAgY291bnQoZmFjdG9yKSAlPiUgCiAgZmlsdGVyKG4gPiAwKSAlPiUKICBucm93KCkKbmZhY3RvcnNfZDM0X2FsbApgYGAKCmBgYHtyIHMzNCBhbGwgdmFyaW1heCByb3RhdGlvbiwgaW5jbHVkZSA9IEZ9CiMgcnVuIEVGQSB3aXRoIHJvdGF0aW9uIHdpdGggTiBmYWN0b3JzCmVmYV9kMzRfYWxsX3JvdGF0ZWROIDwtIGZhKGQzNF9hbGwsIG5mYWN0b3JzX2QzNF9hbGwsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IGNob3NlblJvdFR5cGUsIGNvciA9IGNob3NlbkNvclR5cGUsIGZtID0gIm1pbnJlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcmVzID0gInRlbkJlcmdlIiwgbWlzc2luZyA9IFRSVUUpICMgaW1wdXRlIG1pc3NpbmcgdmFsdWVzCnByaW50KGVmYV9kMzRfYWxsX3JvdGF0ZWROKQoKIyBnZXQgbG9hZGluZ3MgZm9yIGVhY2ggZmFjdG9yCmVmYV9kMzRfYWxsX3JvdGF0ZWROX2xvYWRpbmdzIDwtIGxvYWRpbmdzKGVmYV9kMzRfYWxsX3JvdGF0ZWROKVtdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKHZhciA9ICJjYXBhY2l0eSIpCmBgYAoKYGBge3IgczM0IGxvYWRpbmdzIHRhYmxlLCBpbmNsdWRlID0gRn0KZGF0YS5mcmFtZShsb2FkaW5ncyhmYS5zb3J0KGVmYV9kMzRfYWxsX3JvdGF0ZWROKSlbXSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIG11dGF0ZV9hdCh2YXJzKHN0YXJ0c193aXRoKCJNIikpLCBmdW5zKHJvdW5kMikpCmBgYAoKYGBge3IgczM0IGZpZ3VyZSBzZXR1cCwgaW5jbHVkZSA9IEZ9CnNjb3Jlc19zMzRfcGxvdHRpbmcgPC0gZDMgJT4lIAogIHNlbGVjdChzdWJpZCwgYWdlX2dyb3VwLCBjaGFyYWN0ZXIpICU+JSAKICBkaXN0aW5jdCgpICU+JSAKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZShjaGFyYWN0ZXIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBmdWxsX2pvaW4oZDQgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChzdWJpZCwgYWdlX2dyb3VwLCBjaGFyYWN0ZXIpICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdCgpICU+JSAKICAgICAgICAgICAgICBtdXRhdGUoc3ViaWQgPSBwYXN0ZShjaGFyYWN0ZXIsIHN1YmlkLCBzZXAgPSAiXyIpKSkgJT4lCiAgZnVsbF9qb2luKGVmYV9kMzRfYWxsX3JvdGF0ZWROJHNjb3JlcyAlPiUgCiAgICAgICAgICAgICAgZGF0YS5mcmFtZSgpICU+JSAKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyKSkgJT4lCiAgcmVuYW1lKHNjb3JlX0YxID0gTVIxLCBzY29yZV9GMiA9IE1SMiwgc2NvcmVfRjMgPSBNUjMpICU+JQogIGZpbHRlcighaXMubmEoc2NvcmVfRjEpLCAhaXMubmEoc2NvcmVfRjIpLCAhaXMubmEoc2NvcmVfRjMpLCAhaXMubmEoYWdlX2dyb3VwKSkgJT4lCiAgZ2F0aGVyKGZhY3Rvciwgc2NvcmUsIHN0YXJ0c193aXRoKCJzY29yZV8iKSkgJT4lCiAgbXV0YXRlKGZhY3RvciA9IGZhY3RvcihmYWN0b3IpKSAlPiUKICBtdWx0aV9ib290KGNvbHVtbiA9ICJzY29yZSIsCiAgICAgICAgICAgICBzdW1tYXJ5X2dyb3VwcyA9IGMoImFnZV9ncm91cCIsICJjaGFyYWN0ZXIiLCAiZmFjdG9yIiksCiAgICAgICAgICAgICBzdGF0aXN0aWNzX2Z1bmN0aW9ucyA9IGMoIm1lYW4iLCAiY2lfbG93ZXIiLCAiY2lfdXBwZXIiKSkKYGBgCgpgYGB7ciBzMzQgZmlndXJlIGZhY3RvciBzY29yZXMgYnkgYWdlIGdyb3VwLCBmaWcud2lkdGggPSA2LCBmaWcuaGVpZ2h0ID0gM30KIyBwbG90CmdncGxvdChzY29yZXNfczM0X3Bsb3R0aW5nICU+JQogICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsICJkb2xsIiwgInRlZGR5X2JlYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZSIsICJiaXJkIiwgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsICJkb2xsIiwgInRlZGR5IGJlYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZSIsICJiaXJkIiwgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSksCiAgICAgICAgICAgICAgICBmYWN0b3IgPSBmYWN0b3IoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoInNjb3JlX0YyIiwgInNjb3JlX0YxIiwgInNjb3JlX0YzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU29jaWFsLWVtb3Rpb25hbCIsICJCb2RpbHkiLCAiUGVyY2VwdHVhbC1jb2duaXRpdmUiKSksCiAgICAgICAgICAgICAgICBhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiY2hpbGRyZW5fNDYiLCAiY2hpbGRyZW5fNzkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjQtNnkiLCAiNy05eSIpKSksCiAgICAgICBhZXMoeCA9IGNoYXJhY3RlciwgeSA9IHN1bW1hcnlfbWVhbiwgY29sb3IgPSBjaGFyYWN0ZXIsIHNoYXBlID0gYWdlX2dyb3VwKSkgKwogIGZhY2V0X3dyYXAofiBmYWN0b3IsIG5jb2wgPSAzKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSwgdmp1c3QgPSAwLjUpLAogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgZ2VvbV9wb2ludChzaXplID0gNSwgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNCkpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gc3VtbWFyeV9jaV9sb3dlciwgeW1heCA9IHN1bW1hcnlfY2lfdXBwZXIpLCAKICAgICAgICAgICAgICAgIHdpZHRoID0gMC4yLCBwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gMC40KSkgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgIiMwMEJGQzQiLCAiI0Y4NzY2RCIsIHJlcCgiYmxhY2siLCA0KSkpICsKICAjIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE3LCAxNSwgMTksIHJlcCgxNywgNCkpKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgIiMwMEJGQzQiLCByZXAoImdyYXkiLCAyKSwgIiNGODc2NkQiLCByZXAoImJsYWNrIiwgNCkpLAogICAgICAgICAgICAgICAgICAgICBndWlkZSA9IEZBTFNFKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzIGJ5IGNoYXJhY3RlciBhbmQgYWdlIGdyb3VwIiwKICAgICAgIHggPSAiQ2hhcmFjdGVyIiwKICAgICAgIHkgPSAiTWVhbiBmYWN0b3Igc2NvcmUiLAogICAgICAgc2hhcGUgPSAiQWdlIGdyb3VwOiAiKSAjIDEwMDAgYnkgNTAwCmBgYAoKIyBGYWN0b3Igc2NvcmVzIGJ5IGFnZQoKIyMgU3R1ZHkgMQoKYGBge3IgczEgZmFjdG9yIHNjb3JlcyBieSBhZ2Ugc2V0dXAsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSAzfQpzY29yZXNfczFfcGxvdHRpbmcgPC0gZDEgJT4lIAogIHNlbGVjdChzdWJpZCwgYWdlLCBjaGFyYWN0ZXIpICU+JSAKICBkaXN0aW5jdCgpICU+JSAKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZShjaGFyYWN0ZXIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBmdWxsX2pvaW4oZWZhX2QxX2FsbF9yb3RhdGVkTiRzY29yZXMgJT4lIAogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUgCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIHJlbmFtZShzY29yZV9GMSA9IE1SMSwgc2NvcmVfRjIgPSBNUjIsIHNjb3JlX0YzID0gTVIzKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHNjb3JlX0YxKSwgIWlzLm5hKHNjb3JlX0YyKSwgIWlzLm5hKHNjb3JlX0YzKSwgIWlzLm5hKGFnZSkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkKCmdncGxvdChzY29yZXNfczFfcGxvdHRpbmcgJT4lCiAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgbXV0YXRlKGZhY3RvciA9IGZhY3RvcihmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygic2NvcmVfRjEiLCAic2NvcmVfRjIiLCAic2NvcmVfRjMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCb2RpbHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBlcmNlcHR1YWwtY29nbml0aXZlIikpKSwKICAgICAgIGFlcyh4ID0gYWdlLCB5ID0gc2NvcmUsIGNvbG9yID0gY2hhcmFjdGVyLCBmaWxsID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICBmYWNldF93cmFwKCJmYWN0b3IiLCBuY29sID0gMykgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxvZXNzIiwgYWxwaGEgPSAwLjQpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsKICBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxOSwgMTUpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzIGJ5IGFkdWx0cycgYWdlIiwKICAgICAgICMgc3VidGl0bGUgPSAiQWR1bHRzIChTdHVkeSAxKVxuIiwKICAgICAgIHggPSAiQWdlICh5ZWFycykiLAogICAgICAgeSA9ICJGYWN0b3Igc2NvcmUiKSAjIDEwMDAgYnkgNTAwCmBgYAoKIyMgU3R1ZHkgMgoKYGBge3IgczIgZmFjdG9yIHNjb3JlcyBieSBhZ2Ugc2V0dXAsIGZpZy53aWR0aCA9IDYsIGZpZy5oZWlnaHQgPSAzfQpzY29yZXNfczJfcGxvdHRpbmcgPC0gZDIgJT4lIAogIHNlbGVjdChzdWJpZCwgYWdlLCBjaGFyYWN0ZXIpICU+JSAKICBkaXN0aW5jdCgpICU+JSAKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZShjaGFyYWN0ZXIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBmdWxsX2pvaW4oZWZhX2QyX2FsbF9yb3RhdGVkTiRzY29yZXMgJT4lIAogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUgCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJzdWJpZCIpKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlcikpICU+JQogIHJlbmFtZShzY29yZV9GMSA9IE1SMSwgc2NvcmVfRjIgPSBNUjIsIHNjb3JlX0YzID0gTVIzKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHNjb3JlX0YxKSwgIWlzLm5hKHNjb3JlX0YyKSwgIWlzLm5hKHNjb3JlX0YzKSwgIWlzLm5hKGFnZSkpICU+JQogIGdhdGhlcihmYWN0b3IsIHNjb3JlLCBzdGFydHNfd2l0aCgic2NvcmVfIikpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yKSkKCmdncGxvdChzY29yZXNfczJfcGxvdHRpbmcgJT4lCiAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgbXV0YXRlKGZhY3RvciA9IGZhY3RvcihmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiU29jaWFsLWVtb3Rpb25hbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQm9kaWx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSksCiAgICAgICBhZXMoeCA9IGFnZSwgeSA9IHNjb3JlLCBjb2xvciA9IGNoYXJhY3RlciwgZmlsbCA9IGNoYXJhY3Rlciwgc2hhcGUgPSBjaGFyYWN0ZXIpKSArCiAgZmFjZXRfd3JhcCgiZmFjdG9yIiwgbmNvbCA9IDMpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsb2VzcyIsIGFscGhhID0gMC40KSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgYWxwaGEgPSAwLjQpICsKICBnZW9tX3BvaW50KHNpemUgPSAyKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMTksIDE1KSkgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIHNjb3JlcyBieSBjaGlsZHJlbidzIGFnZSIsCiAgICAgICAjIHN1YnRpdGxlID0gIkNoaWxkcmVuIChTdHVkeSAyKVxuIiwKICAgICAgIHggPSAiQWdlICh5ZWFycykiLAogICAgICAgeSA9ICJGYWN0b3Igc2NvcmUiKSAjIDEwMDAgYnkgNTAwCmBgYAoKIyMgU3R1ZGllcyAxLTIKCmBgYHtyIHMxMiBzY2F0dGVyIHBsdXMgbWVhbiBzY29yZXMgYnkgYWdlIHNldHVwLCBmaWcud2lkdGggPSA1LCBmaWcuaGVpZ2h0ID0gM30KdGVtcEEgPC0gZDIgJT4lIAogIHNlbGVjdChzdWJpZCwgYWdlLCBjaGFyYWN0ZXIpICU+JSAKICBkaXN0aW5jdCgpICU+JSAKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZShjaGFyYWN0ZXIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBmdWxsX2pvaW4oZWZhX2QxMl9hbGxfcm90YXRlZE4kc2NvcmVzICU+JSAKICAgICAgICAgICAgICBkYXRhLmZyYW1lKCkgJT4lIAogICAgICAgICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigic3ViaWQiKSkgJT4lCiAgbXV0YXRlKGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIpKSAlPiUKICByZW5hbWUoc2NvcmVfRjEgPSBNUjEsIHNjb3JlX0YyID0gTVIyLCBzY29yZV9GMyA9IE1SMykgJT4lCiAgZmlsdGVyKCFpcy5uYShzY29yZV9GMSksICFpcy5uYShzY29yZV9GMiksICFpcy5uYShzY29yZV9GMyksICFpcy5uYShhZ2UpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgc3RhcnRzX3dpdGgoInNjb3JlXyIpKSAlPiUKICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlNvY2lhbC1lbW90aW9uYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQm9kaWx5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBlcmNlcHR1YWwtY29nbml0aXZlIikpKQoKdGVtcEIgPC0gc2NvcmVzX3MxMl9wbG90dGluZyAlPiUKICBmaWx0ZXIoYWdlX2dyb3VwID09ICJhZHVsdHMiKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGZhY3RvciA9IGZhY3RvcihmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJvZGlseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIpKSwKICAgICAgICAgYWdlID0gMTEpIAoKZ2dwbG90KHRlbXBBLAogICAgICAgYWVzKHggPSBhZ2UsIHkgPSBzY29yZSwgY29sb3IgPSBjaGFyYWN0ZXIsIGZpbGwgPSBjaGFyYWN0ZXIsIHNoYXBlID0gY2hhcmFjdGVyKSkgKwogIGZhY2V0X3dyYXAoImZhY3RvciIsIG5jb2wgPSAzKSArCiAgdGhlbWVfYncoKSArCiAgdGhlbWUodGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjgpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKwogICMgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxvZXNzIiwgYWxwaGEgPSAwLjQpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCkgKwogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsKICBnZW9tX3BvaW50KGRhdGEgPSB0ZW1wQiwgYWVzKHkgPSBzdW1tYXJ5X21lYW4pLAogICAgICAgICAgICAgc2l6ZSA9IDQsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjYpKSArCiAgZ2VvbV9lcnJvcmJhcihkYXRhID0gdGVtcEIsIGFlcyh5bWluID0gc3VtbWFyeV9jaV9sb3dlciwgeW1heCA9IHN1bW1hcnlfY2lfdXBwZXIsIHkgPSBzdW1tYXJ5X21lYW4pLCB3aWR0aCA9IDAuNCwKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjYpKSArCiAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMTksIDE1KSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDc6MTEpLCBsYWJlbHMgPSBjKCI3eSIsICI4eSIsICI5eSIsICIxMHkiLCAiYWR1bHRzIikpICsKICBsYWJzKHRpdGxlID0gIkZhY3RvciBzY29yZXMgYnkgYWdlIiwKICAgICAgICMgc3VidGl0bGUgPSAiQ2hpbGRyZW4gKFN0dWR5IDIpXG4iLAogICAgICAgeCA9ICJBZ2UiLAogICAgICAgeSA9ICJGYWN0b3Igc2NvcmUiKSAjIDEwMDAgYnkgNTAwCmBgYAoKIyMgU3R1ZGllcyAzLTQKCmBgYHtyIHMzNCBmYWN0b3Igc2NvcmVzIGJ5IGFnZSBzZXR1cCwgZmlnLndpZHRoID0gNSwgZmlnLmhlaWdodCA9IDEwfQpzY29yZXNfczM0X3Bsb3R0aW5nIDwtIGQzICU+JQogIHNlbGVjdChhZ2VfZ3JvdXAsIHN1YmlkLCBhZ2UsIGNoYXJhY3RlcikgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBtdXRhdGUoc3ViaWQgPSBwYXN0ZShjaGFyYWN0ZXIsIHN1YmlkLCBzZXAgPSAiXyIpKSAlPiUKICBmdWxsX2pvaW4oZDQgJT4lCiAgICAgICAgICAgICAgc2VsZWN0KGFnZV9ncm91cCwgc3ViaWQsIGFnZSwgY2hhcmFjdGVyKSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdCgpICU+JQogICAgICAgICAgICAgIG11dGF0ZShzdWJpZCA9IHBhc3RlKGNoYXJhY3Rlciwgc3ViaWQsIHNlcCA9ICJfIikpKSAlPiUKICBmdWxsX2pvaW4oZWZhX2QzNF9hbGxfcm90YXRlZE4kc2NvcmVzICU+JQogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oInN1YmlkIikpICU+JQogIG11dGF0ZShjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyKSkgJT4lCiAgbXV0YXRlKGFnZSA9IGlmZWxzZShhZ2UgPCAzLjUsIE5BLCBhZ2UpKSAlPiUKICByZW5hbWUoc2NvcmVfRjEgPSBNUjEsIHNjb3JlX0YyID0gTVIyLCBzY29yZV9GMyA9IE1SMykgJT4lCiAgZmlsdGVyKCFpcy5uYShzY29yZV9GMSksICFpcy5uYShzY29yZV9GMiksICFpcy5uYShzY29yZV9GMyksICFpcy5uYShhZ2UpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBzY29yZSwgc3RhcnRzX3dpdGgoInNjb3JlXyIpKSAlPiUKICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvcikpCgpnZ3Bsb3Qoc2NvcmVzX3MzNF9wbG90dGluZyAlPiUKICAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgICBtdXRhdGUoZmFjdG9yID0gZmFjdG9yKGZhY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJzY29yZV9GMSIsICJzY29yZV9GMiIsICJzY29yZV9GMyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIlNvY2lhbC1lbW90aW9uYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBlcmNlcHR1YWwtY29nbml0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCb2RpbHkiKSksCiAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgPSBmYWN0b3IoY2hhcmFjdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNvbXB1dGVyIiwgInJvYm90IiwgImRvbGwiLCAidGVkZHlfYmVhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgImJpcmQiLCAibW91c2UiLCAiZ29hdCIsICJlbGVwaGFudCIpKSksCiAgICAgICAjIGFlcyh4ID0gYWdlLCB5ID0gc2NvcmUsIGNvbG9yID0gY2hhcmFjdGVyLCBmaWxsID0gY2hhcmFjdGVyLCBzaGFwZSA9IGNoYXJhY3RlcikpICsKICAgICAgIGFlcyh4ID0gYWdlLCB5ID0gc2NvcmUsIGdyb3VwID0gYWdlX2dyb3VwKSkgKwogICMgZmFjZXRfd3JhcCgiZmFjdG9yIiwgbmNvbCA9IDMpICsKICAjIGZhY2V0X2dyaWQoZmFjdG9yIH4gY2hhcmFjdGVyKSArCiAgZmFjZXRfZ3JpZChjaGFyYWN0ZXIgfiBmYWN0b3IpICsKICB0aGVtZV9idygpICsKICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyOCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiLCBhbHBoYSA9IDAuNCkgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGFscGhhID0gMC40KSArCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCwgZm9ybXVsYSA9IHkgfiBwb2x5KHgsIDIpKSArCiAgIyBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBhbHBoYSA9IDAuNCwgZm9ybXVsYSA9IHkgfiBwb2x5KHgsIDMpKSArCiAgZ2VvbV9wb2ludChzaXplID0gMikgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMiwgMTIsIDIpKSArCiAgIyBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJibGFjayIsICIjMDBCRkM0IiwgcmVwKCJncmF5IiwgMiksICIjRjg3NjZEIiwgcmVwKCJibGFjayIsIDQpKSkgKwogICMgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgIiMwMEJGQzQiLCByZXAoImdyYXkiLCAyKSwgIiNGODc2NkQiLCByZXAoImJsYWNrIiwgNCkpKSArCiAgIyBzY2FsZV9zaGFwZV9tYW51YWwodmFsdWVzID0gYygxNywgMTUsIHJlcCgxNywgMiksIDE5LCByZXAoMTcsIDQpKSkgKwogIGxhYnModGl0bGUgPSAiRmFjdG9yIHNjb3JlcyBieSBjaGlsZHJlbidzIGFnZSIsCiAgICAgICAjIHN1YnRpdGxlID0gIkNoaWxkcmVuIChTdHVkaWVzIDMtNClcbiIsCiAgICAgICB4ID0gIkFnZSAoeWVhcnMpIiwKICAgICAgIHkgPSAiRmFjdG9yIHNjb3JlIikgIyAxMDAwIGJ5IDUwMAoKZ2dwbG90KHNjb3Jlc19zMzRfcGxvdHRpbmcgJT4lCiAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgbXV0YXRlKGZhY3RvciA9IGZhY3RvcihmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygic2NvcmVfRjEiLCAic2NvcmVfRjIiLCAic2NvcmVfRjMiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJTb2NpYWwtZW1vdGlvbmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQZXJjZXB0dWFsLWNvZ25pdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQm9kaWx5IikpLAogICAgICAgICAgICAgICAgY2hhcmFjdGVyID0gZmFjdG9yKGNoYXJhY3RlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJjb21wdXRlciIsICJyb2JvdCIsICJkb2xsIiwgInRlZGR5X2JlYXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZXRsZSIsICJiaXJkIiwgIm1vdXNlIiwgImdvYXQiLCAiZWxlcGhhbnQiKSkpLAogICAgICAgYWVzKHggPSBhZ2UsIHkgPSBzY29yZSkpICsKICAgICAgICMgYWVzKHggPSBhZ2UsIHkgPSBzY29yZSwgZ3JvdXAgPSBhZ2VfZ3JvdXApKSArCiAgIyBmYWNldF93cmFwKCJmYWN0b3IiLCBuY29sID0gMykgKwogICMgZmFjZXRfZ3JpZChmYWN0b3IgfiBjaGFyYWN0ZXIpICsKICBmYWNldF9ncmlkKGNoYXJhY3RlciB+IGZhY3RvcikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI4KSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsKICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsb2VzcyIsIGFscGhhID0gMC40KSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgYWxwaGEgPSAwLjQpICsKICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGFscGhhID0gMC40LCBmb3JtdWxhID0geSB+IHBvbHkoeCwgMikpICsKICAjIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGFscGhhID0gMC40LCBmb3JtdWxhID0geSB+IHBvbHkoeCwgMykpICsKICBnZW9tX3BvaW50KHNpemUgPSAyKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgyLCAxMiwgMikpICsKICAjIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoImJsYWNrIiwgIiMwMEJGQzQiLCByZXAoImdyYXkiLCAyKSwgIiNGODc2NkQiLCByZXAoImJsYWNrIiwgNCkpKSArCiAgIyBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiYmxhY2siLCAiIzAwQkZDNCIsIHJlcCgiZ3JheSIsIDIpLCAiI0Y4NzY2RCIsIHJlcCgiYmxhY2siLCA0KSkpICsKICAjIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE3LCAxNSwgcmVwKDE3LCAyKSwgMTksIHJlcCgxNywgNCkpKSArCiAgbGFicyh0aXRsZSA9ICJGYWN0b3Igc2NvcmVzIGJ5IGNoaWxkcmVuJ3MgYWdlIiwKICAgICAgICMgc3VidGl0bGUgPSAiQ2hpbGRyZW4gKFN0dWRpZXMgMy00KVxuIiwKICAgICAgIHggPSAiQWdlICh5ZWFycykiLAogICAgICAgeSA9ICJGYWN0b3Igc2NvcmUiKSAjIDEwMDAgYnkgNTAwCmBgYAo=